The hosts suffered an early setback when goalkeeper Mattia Perin was dismissed for a professional foul but his replacement Eugenio Lamanna saved Adem Ljajic’s penalty with his first touch.
Radja Nainggolan then scored the only goal of the game, while Roma went on to dominate the remaining hour, they were lucky that Tomas Rincon’s last-gasp goal was ruled out for offside.
With Juve dropping points in Sunday’s 1-1 draw with Sampdoria, Roma were able to seriously slash the reigning champions’ advantage.
Ambitious Genoa, meanwhile, slipped to fifth courtesy of their first league defeat since September.
Earlier, Manolo Gabbiadini came off the bench to score a second-half equaliser as Samp ended Juve’s perfect home run in the league.
Patrice Evra put the hosts ahead with his first goal for Juve, but the Bianconeri were unable to extend their lead despite having chances to do so and were made to pay.
Gabbiadini struck the equaliser six minutes into the second half to earn Samp a deserved point.
Lazaros Christodoulopoulos inspired Hellas Verona to a 2-1 come-from-behind victory at Udinese as they ended a three-match losing run.
Udinese captain Antonio Di Natale put the hosts ahead before Christodoulopoulos set up Luca Toni for the equaliser before half-time.
Shortly after the break, the Greece international put Hellas in front for good with his first goal of the season.
Elsewhere, bottom side Parma halted a four-match losing streak with a goalless draw at home to fellow strugglers Cagliari.
The visitors were the better side but could not find a way past Parma goalkeeper Antonio Mirante, who made three saves to earn his team a valuable point at the Stadio Ennio Tardini.