Juve seemed to be cruising to victory after an early goal while their relegation-threatened opponents were reduced to 10 men early in the second period.
But Andrea Bertolacci's goal five minutes from time snatched a draw and allowed Milan, 2-0 winners over Atalanta, to reduce their arrears.
And it was a horror mistake from Juve goalkeeper Gianluigi Buffon that gifted Lecce the equaliser, suggesting the Turin giants might just be cracking under the title pressure.
It ended Juve's eight-match winning run and gives Milan renewed hope of retaining their crown.
But Juve coach Antonio Conte refused to blame his decorated keeper for the dropped points.
"There was a moment of slackness, we missed a bonus and now we have to win the last two games," he said.
"But if you'd have offered me this at the beginning of the year, I'd have signed on a thousand times.
"That's football, it was incredible what happened. A mistake can happen, Gigi's having an amazing year."
Juve were off to a dream start and it came from their fabled midfield.
The incomparable Andrea Pirlo was given too much time on the edge of the box and he put in a delightful chip over the defence for Claudio Marchisio to run onto and although his header looked tame, goalkeeper Massimiliano Benassi seemed to slip and the ball crept in.
Any chance Lecce had of dragging themselves back into the contest seemed to die 10 minutes into the second period when Juan Cuadrado was harshly sent off for a second booking.
Juve missed a hatful of chances but then Buffon's first touch from Andrea Barzagli's back-pass was horribly heavy and Bertolucci nipped in to rob him and score.
Milan coach Massimiliano Allegri admitted that he thought the title was over until the late drama in Turin.
"With five minutes to go the title seemed over but then Lecce scored and at the end I felt like I was at the theatre waiting for the end of an opera," he said.
"I'm enjoying it a lot. Now we'll arrive at the derby fired up. The title is still in Juve's hands but even taking it to the final match wouldn't be bad."
Milan started brightly and a pair of efforts from Kevin-Prince Boateng and one from Zlatan Ibrahimovic tested goalkeeper Andrea Consigli.
On nine minutes, Boateng found Muntari in the box, although the Ghana midfielder was perhaps offside, to poke in from close range.
Milan enjoyed the lion's share of chances but they had to wait until injury time to wrap up the points through Robinho.
Inter Milan's Champions League hopes took a knock as they lost 3-1 at Parma and now trail Napoli and Udinese by three points in the race for third.
Inter took the lead after just 13 minutes as Wesley Sneijder arrived at the back post to squeeze in the ball from a tight angle.
But two goals in two minutes turned the game on its head.
Sebastian Giovinco robbed Lucio and then nutmegged Walter Samuel to set up a tap-in for Jose Marques before scoring the second himself after beating the offside trap.
Former Inter forward Jonathan Biabiany sealed the points late on with the third.
Udinese matched Napoli's points with a 1-0 win at already relegated Cesena, although they trail the southerners on head-to-head record.
Diego Fabbrini scored the only goal of the game but Cesena's Adrian Mutu hit the bar with a penalty.
Lazio are two points off third after they were held 1-1 at home to Siena, who went in front through Mattia Destro before the hosts equalised with a Cristian Ledesma spot-kick.
Novara joined Cesena in Serie B as they were relegated after a 2-2 draw at Fiorentina.