Maurizio Sarri’s side struck twice in the opening 10 minutes, as Merih Demiral met Paulo Dybala’s free-kick before Dybala then earned a penalty which Cristiano Ronaldo duly converted.
Roma responded in the second half through Diego Perotti’s spot-kick.
Antonio Conte’s Inter were held to a 1-1 draw at home to Atalanta on Saturday.
Ronaldo’s ninth goal in seven games appeared to have put Juventus in firm control in a first half overshadowed by a serious-looking injury to 20-year-old Roma midfielder Nicolo Zaniolo, following a challenge by Matthijs de Ligt.
But Paulo Fonseca’s hosts produced a reaction after the interval, striker Edin Dzeko hitting the post moments before a video assistant referee review found Sandro to have handled amid a goalmouth scramble.
With the Stadio Olimpico roaring Roma on, Juve’s Gonzalo Higuain had a goal disallowed for offside while Aleksandar Kolarov missed an excellent headed opportunity to equalise.
Juve held on despite late pressure to record a fourth successive league win since suffering a first defeat of the season against Lazio in December.