Lisandro opened the scoring in the 40th minute from a Bafetimbi Gomis pass following a quick counter-attack. He then set up Anthony Reveillere for the right back's first goal in five years, 16 minutes into the second half.
Gomis added the third from the penalty spot in the 77th minute after goalkeeper David Ospina had fouled him in the box and was sent off. Lyon had centre back Dejan Lovren dismissed for a second yellow card in the 90th minute.
Lyon now trail leaders Paris St Germain on goal difference. Third-placed Olympique Marseille, who have 35 points, host St Etienne on Sunday.
"We wanted to reach the winter break with an average of two points per game. It's done," Gomis said.
"Nice came here to try to upset us but we proved patient and have shown we have learned after Nancy," he added, referring to the last home game against the bottom-placed side which ended in a 1-1 draw.
Nice, who were unbeaten in Ligue 1 since late October, fell to eighth on 29 points.
Stade Rennes climbed to fourth on 32 points thanks to a 4-2 win at Ajaccio, where the game was stopped for a few minutes because of confusion over a refereeing decision.
Julien Feret netted the visitors' fourth goal following a free-kick in the box. The referee had wrongly whistled after Ajaccio's centre back Carl Medjani headed the ball to his goalkeeper.
Adrian Mutu and Fousseni Diawara had put the hosts ahead twice only to see Feret and Romain Alessandrini level their side in a thrilling first half. Rennes went in front in the 61st minute thanks to the 20-year-old Cheick Diarra's first league goal, before Feret sealed their victory.
Lorient, who had won their last four games, could only grasp a 2-2 home draw against promoted side Stade Reims, with Pedrinho equalising in the stoppage-time for the hosts, who are now fifth on 31 points.
Earlier, Nolan Roux scored twice and set up another as Lille hammered 10-man Montpellier 4-1 at home to climb to seventh on 29 points.
Roux netted a lucky opener in the 24th minute when his deflected effort looped over keeper Geoffrey Jourdren and he set up Dimitri Payet for a superb curling strike just before half-time.
Montpellier, who had Younes Belhanda sent off in first-half stoppage time for a kick on Benoit Pedretti, collapsed after the break as Roux and substitute Ryan Mendes both found the net. Montpellier lie 11th with 26 points.
Bastia, banned from playing at home until further notice following a series of violent incidents in the stands, defeated Nancy 4-2 in Gueugnon, eastern France.