(Adds details, quotes)
Jose Callejon and substitute Dries Mertens, who had only been on the pitch for two minutes, handed Juventus their first league defeat since Oct. 20 to give a glimmer of hope to chasing AS Roma.
Second-placed Roma cut Juve's lead to 11 points after a controversial 2-0 win at lowly Sassuolo where play was delayed for five minutes as the referee changed his mind over a penalty decision.
Juventus have 81 points from 31 games and seven left to play while Roma have 70 and Napoli, in the Champions League playoff spot, are on 64.
Although Juventus still have a huge lead, there were enough signs of fatigue in their performance to give encouragement to Roma who have a game in hand.
"Until it becomes mathematically impossible, we have to keep looking forward," said Roma coach Rudi Garcia.
Controversy erupted in the 36th minute of Roma's game when Italy World Cup referee Nicola Rizzoli initially awarded Sassuolo a penalty for a foul by Mehdi Benatia on Nicola Sansone but then gave Roma a drop ball after five minutes of protests.
Roma were 1-0 ahead through Mattia Destro's 10th goal of the season at the time and a late goal by Brazilian Michel Bastos secured the win.
Sampdoria coach Sinisa Mihajlovic was sent off as his side drew 0-0 at home to Fiorentina but said he did not mind as he would be suspended when they play Lazio next week.
"The last time I won at Lazio, with Catania, I was also suspended," said the Serb. "I'm one of the few coaches who stand up for referees and I didn't offend anyone."
Lazio, again playing in a half-empty Stadio Olimpico as fans continued to boycott the team in protest at president Claudio Lotito, beat Parma 3-2 thanks to a stoppage-time winner from Antonio Candreva.
Senad Lulic and Miroslav Klose twice gave Lazio the lead but Parma hit back through Jonathan Biabiany and a bizarre Michael Ciani own goal.
Ciani made a complete hash of an attempt to control the ball and sent it between Lazio goalkeeper Federico Marchetti's legs.
At the San Paolo, Napoli piled into Juventus from the start and only 36-year-old goalkeeper Buffon kept them at bay as he made a point blank save from Callejon and brilliantly turned Marek Hamsik's effort over the bar.
Hamsik also had a goal disallowed but Rafael Benitez's side were finally rewarded when Callejon got in front of Kwadwo Asamoah to turn Lorenzo Insigne's cross past Buffon in the 28th minute.
Juventus playmaker Andrea Pirlo failed to hit the target with his usually dependable free kicks and even sent one crossfield pass straight to the opposition in a weary-looking first-half display.
The visitors improved after halftime but, just as they were threatening an equaliser, Napoli broke clear and Mertens fired an angled shot past Buffon with nine minutes left.
"We have too often lacked the determination and intensity we showed this season," said Benitez. "We've played plenty of games at a very high level but we haven't been able to maintain that standard for the whole season."
(Reporting by Brian Homewood; Editing by Ed Osmond)