Veretout’s well-taken strike on the brink of half time edged the hosts back in front, and they looked to be on top when Rabiot was shown a second yellow card midway through the second half, but an imperious Ronaldo header levelled the scores.
Roma threatened on the break early on when Henrikh Mkhitaryan dribbled from inside his own half and skipped past Leonardo Bonucci into the box, only to be denied a stunning solo goal by the outrushing Wojciech Szczesny.
The Giallorossi went in front from the penalty spot on the half-hour mark when Veretout’s shot struck the raised arm of Rabiot, and the Frenchman’s resulting penalty found the bottom corner despite Szczesny getting a glove to it.
Juventus were struggling to create any chances of note but were handed a golden opportunity when Ronaldo’s pass hit the dangling arm of Lorenzo Pellegrini, and the Portuguese forward dispatched his spot kick into the corner.
Just before the break the hosts went back in front thanks to a lightning counter-attack. Mkhitaryan squared a pass to Veretout, who took a touch and rolled a composed finish past the Polish goalkeeper.
Roma captain Edin Dzeko, who was close to joining Juventus in the week leading up to this fixture, was inches away from making it 3-1 early in the second half when his curling shot came off the foot of the post.
The visitors’ night got worse on the 62nd minute when Rabiot was shown a second yellow card for a clumsy challenge on Mkhitaryan, leaving his side a man down in their efforts to equalise.
But they soon responded as substitute Douglas Costa put a cross into the box for Ronaldo, who hung in the air in trademark fashion before guiding his header into the back of the net.