Niko Kovac's team have been the best in the French top flight in 2021 and had come into Sunday's encounter on the back of five straight wins.
However, Rayan Cherki's 89th-minute strike snatched the points for Lyon, who had lost the lead just three minutes earlier to a Wissam Ben Yedder penalty.
Lyon came away with the win despite having to play the final 20 minutes a man down after Maxence Caqueret was sent off for two bookable offences.
Three more players were sent off after the final whistle after a scuffle broke out between the two teams.
Third-placed Monaco are now looking over their shoulders at Lyon for Champions League qualification as they lead Rudi Garcia's team by a single point following their defeat at the Stade Louis II.
"I'm happy, I hope there will be plenty more more goals," said a bullish Cherki after scoring his first of the season.
"We have three more matches, three finals. We will get maximum points and then we look at the numbers at the end of the season."
Kevin Volland opened the scoring against the run of play for the hosts in the 25th minute, collecting Ben Yedder's superb first-time through ball before holding off Jason Denayer and slotting home his 16th goal of the season.
Memphis Depay, who is out of contract at the end of the season, levelled the scores just before the hour mark with a magnificent solo goal.
Defender Marcelo headed Lyon 2-1 ahead seven minutes after Caqueret was dismissed but a draw looked likely when Ben Yedder dinked home the leveller from the spot.
However Cherki had the final word, meeting Mattia De Sciglio's cut-back to slot home the winner and give his team hope of Champions League football next season.
- Bordeaux boost survival hopes -
Bordeaux snapped a run of five successive defeats with a 1-0 home victory over European hopefuls Rennes on Sunday to edge clear of a potential relegation battle.
Teenager Sekou Mara scored the winner 11 minutes into his first Ligue 1 start after Rennes were reduced to 10 men following the early dismissal of France midfielder Steven Nzonzi.
Some 800 Bordeaux fans escorted the team coach from their hotel to the Matmut Atlantique, in a show of support for a struggling club that was placed into administration last month.
American investment fund King Street recently announced it was going to pull its financial support for the six-time French champions, sparking fears the club could go out of business.
Supporters, some carrying smoke grenades and others waving flags, again voiced their anger at president Frederic Longuepee, accusing him of plunging the club into bankruptcy.
Last week, they had protested in front of the city's town hall demanding Longuepee's resignation. On Sunday, many supported the team from just outside ground as Bordeaux won for only the second time in 14 games.
Bordeaux remained five points clear of the bottom three after Nantes hammered Brest 4-1 for their second win in a row.
Nimes are two points adrift of the relegation play-off place following a 2-2 home draw with Reims.
Lorient, in 17th, are level with Strasbourg and a point back of Bordeaux after a 2-0 victory over Angers, while Metz thrashed relegated Dijon 5-1.
Montpellier coach Michel Der Zakarian will leave the team at the end of the season, a club source confirmed prior to Sunday's 2-1 home loss against Saint-Etienne.
Der Zakarian, 58, has been in charge since 2017 and this season led Montpellier to the French Cup semi-finals for the first time in 24 years.
After seeing their 11-match league unbeaten run ended by Nice last weekend, Montpellier slumped to a second straight defeat despite an early goal from Andy Delort.
Romain Hamouma levelled for Saint-Etienne and Mathieu Debuchy grabbed the winner five minutes into the second half.