The Azzurri scored 31 unanswered second-half points to claim a second consecutive bonus-point win.
Uruguay led 17-7 at the break on Wednesday and were dreaming of a huge upset after a remarkable first half.
That began well for Italy with a try by Lorenzo Pani - given after the TMO decided he just scraped the ball on the grass under pressure from a double challenge, but then went badly wrong.
A nervous Felipe Etcheverry dragged his first two penalty kicks wide but Italy's progress stalled in the 26th minute when lock Niccolo Cannone was yellow-carded for a cynical foul in defence of his tryline.
Moments later, Uruguay mauled over the line and a video review ruled Italy prop Danilo Fischetti collapsed it. A penalty try was awarded and Fischetti joined Cannone in the sin-bin.
Uruguay exploited the two-man advantage just before it ended when Etcheverry offloaded to wing Nicolas Freitas to score in the left corner.
Etcheverry converted from the touchline and added a 45-metre drop goal with the last kick of the half.
The match turned again at the start of the second half when Uruguay captain Andrés Vilaseca was shown a harsh yellow card for a high tackle.
Italy made the numerical advantage count as, after having one try ruled out, it scored four tries in 16 minutes.
Michele Lamaro, Montanna Ioane, Cannnone and Ignacio Brex struck as the South Americans tired.
Italy top the Pool A standings with 10 points and still have to play France and New Zealand, who remain odds-on favourites to advance.
- with AP