Cristiano Ronaldo netted in his 10th successive league game – one short of a Serie A record – to open the scoring for the league leaders before Fabio Borini equalised for the hosts.
But Pazzini converted an 86th-minute spot-kick after the video assistant referee said Marash Kumbulla’s header hit Leonardo Bonucci’s arm.
Victory sees Verona rise to sixth.
Meanwhile, Juve remain top with 54 points but Inter Milan could replace them at the summit of Serie A if they beat AC Milan on Sunday.
The hosts, who won promotion to the Italian top flight via the play-offs last season, impressed in the first half and could have easily gone ahead when Davide Faraoni’s powerful drive was tipped over by Wojciech Szczesny.
Kumbulla thought he had given his side an unlikely lead on 23 minutes when his header from Miguel Veloso’s deep free-kick beat Szczesny only to be ruled out by VAR.
But the champions did have chances of their own – Ronaldo struck the post after driving infield while Douglas Costa drew a super save from ex-Leeds keeper Marco Silvestri.
And it was away side who broke the deadlock as Ronaldo latched on to Rodrigo Bentancur’s through ball, shrugged off the attentions of Amir Rrahmani, and fired home to become the first Juve player to score in 10 consecutive Serie A games.
Ronaldo, who turned 35 on Wednesday, has now scored 20 goals from 20 league games this season, with 15 of those strikes coming in his last 10 outings.
The best goalscoring runs in a single Serie A season have stopped at 11 games – Fabio Quagliarella last season and Gabriel Batistuta in 1994-95.
However, it was not to be for Ronaldo and co, as ex-Liverpool and Sunderland striker Borini capitalised on a defensive error by Miralem Pjanic to break into the area and slot home the equaliser.
And with time running out it was another 35-year-old, Pazzini, who had the final say as he rifled past Szczesny from the spot to seal a famous win for his side and put Juve’s hopes of defending their title in jeopardy.