|Atalanta's Colombian forward Duvan Zapata (right) scored a minute after missing a penalty against Roma. (AFP/Marco BERTORELLO) |
Juventus had trailed after an Emre Can own-goal after an hour before substitute Joao Cancelo pulled the champions level and then earned the penalty which Ronaldo slotted in with two minutes to go.
An eighth straight Serie A title beckons for Massimiliano Allegri's side who soar clear of second-placed Napoli who were held to a goalless draw at AC Milan on Saturday.
Inter Milan are 19 points behind the leaders after losing 1-0 at Torino earlier on Sunday.
Lazio drop to eighth place - three points off the Champions League spots - after their second defeat in a row after losing to Napoli by the same score last weekend.
"It must have been the kitman's fault, giving us ten shirts of different colours because we couldn't pass the ball to each other," said Allegri.
"For sixty minutes it was the worst Juventus of the year," said captain Giorgio Chiellini.
"Paradoxically after the goal disadvantage we found the motivation to win it.
"We've got players who make the difference. (Goalkeeper Wojciech) Szczesny kept us on our feet, we were lethal in the end."
The champions had struggled for the first hour in the Stadio Olimpico as Lazio piled on the pressure.
Daniele Rugani pulled off a goal-line clearance, after Joaquin Correa dribbled past Can and Leonardo Bonucci, with Szczesny denying Luis Alberto and Marco Parolo.
German midfielder Can's woes were compounded just before the hour mark when he ducked down and instead deflected the ball into his own net off a corner.
But Allegri's side could count on the depth of their bench with second half substitutes Cancelo and Federico Bernardeschi proving pivotal.
A solo run by Bernardeschi down the left set up the equaliser which Cancelo fired in off a rebound after Lazio goalkeeper Thomas Strakosha had initially cleared a Paulo Dybala shot.
Ronaldo - whose penalty was saved last week against Chievo - finished off to score in his eighth consecutive away match to bring his league tally to 15 goals.
Inter Milan fell at Torino with defender Armando Izzo scoring the only goal after 35 minutes, as Roma threw away a three-goal lead to draw 3-3 against Atalanta.
Roma could have overtaken AC Milan in fourth but Colombian forward Duvan Zapata continued his goal-scoring streak to snatch a point.
Roma had been three goals up following an Edin Dzeko brace, with Stephan El Shaarawy adding a third five minutes prior to the break, before the Romans faded under the driving rain in northern Italy.
Roma coach Eusebio Di Francesco lamented: "What drives me crazy is the lack of consistency from this team, even during the same match.
"It's absurd to see a team with the same players put in such a different performance from one half to the next.
"We were fortunate to get a draw."
Dzeko broke through after just three minutes for his first goal in Serie A since October, adding a second half an hour later, with teenage compatriot Nicolo Zaniolo providing two assists.
Atalanta fought back with Zapata heading just wide before Roma doubled their lead against the run of play with Steven Nzonzi finding a way through for Dzeko to finish off.
Zaniolo set up El Shaarawy to make it 3-0 five minutes before the break but Timothy Castagne headed Atalanta back into the game before the interval.
Di Francesco's men struggled after the break with former Roma defender Rafael Toloi nodding in Atalanta's second just before the hour off a Papu Gomez cross.
Zapata missed a chance for a third ten minutes later sending a penalty kick over the bar.
But a minute later he fired in his 14th goal in the last eight league games, for a total of 15 this season.
Both sides also drew 3-3 when they met in Rome last August, a game in which the Romans had come from 3-1 down.
Atalanta are now seventh, three points off the elite European places.
Italian Serie A results:
Chievo 3 Fiorentina 4
Parma 2 SPAL 3 87)
Bologna 0 Frosinone 4
Atalanta 3 Roma 3
Torino 1 Inter Milan 0
Lazio 1 Juventus 2