Juve made five changes from the Coppa Italia win over AS Roma on Wednesday, with Wojciech Szczesny, Juan Cuadrado, Matthijs De Ligt, Blaise Matuidi and Paulo Dybala returning to the side.
Maurizio Sarri's side had the chance to go six points clear at the top of the table, with Napoli on a poor run of form with just one win in their last five league matches.
Napoli looked for the opener on 20 minutes through Marco Ruiz but after finding himself in the area, he failed to bring Szczesny to a save.
A slow start culminated with minimal openings, as Dybala whipped a free-kick into the box for Cristiano Ronaldo who headed over on two minutes before the halftime break.
Juventus introduced the first substitution five minutes after halftime, as Adrien Rabiot came on for the injured Miralem Pjanic.
However, Napoli went ahead on 63 minutes when Szczesny pushed Lorenzo Insigne's shot outside the area straight to Pietro Zielinski who applied a simple finish.
Juve made a double change in the final quarter, as attacking midfielders Federico Bernardeschi and Douglas Costa replaced Dybala and Matuidi.
Napoli though went and sealed the contest in the final four minutes when Insigne capped off a fine evening to turn home Jose Callejon's delivery.
Juve set up a nervy finish at the death when Ronaldo squeezed home Rodrigo Bentancur's ball beyond Alex Meret, but there was no comeback as the champions suffer their second defeat of the season.
AS Roma 1-1 Lazio
Hellas Verona 3-0 Lecce
Sampdoria 0-0 Sassuolo
Parma 2-0 Udinese