Moustapha Sall and Ricky Van Wolfswinkel gave Saint Etienne a 2-0 lead by half-time and Renaud Cohade finished the job in the 69th minute.
The result sent a wave of joy round the stadium as it ended a run dating back to April 1994 and a series of seven home defeats by their bitter local rivals.
Playing with a five-man defence the home side were rarely troubled by Lyon's 4-4-2 but breathed huge sighs of relief when Lyon striker Alexandre Lacazette missed a sitter at 1-0 before also sending a penalty wide in the 79th minute.
"We put pressure on them and played it perfectly the way we came out of defence, it's exactly what we wanted," said Saint Etienne coach Christophe Galtier.
Ivory Coast midfielder Max Gradel provided the assist for the first two goals as he comes back into form after recent injuries.
"I've been working hard and it's paid off, hopefully I'll get more games now," he told French television.
Marseille remain top on 34 points after their 2-0 home win over Nantes on Friday while champions Paris Saint Germain are second on 33 after their 1-0 win over Nice on Saturday.
Lyon had gone 10 games unbeaten since the beginning of September to climb to third in the table, where they still remain on 27 points ahead of Bordeaux in fourth on goal difference.
Bordeaux remained in the hunt for a Champions League place after a 1-0 win over Lille, thanks to a goal by giant Mali striker Cheick Diabate.
Lille, the 2011 champions, remain 14th and just two points above the relegation zone.
It was a welcome return to form for Bordeaux, who lost last week at Marseille to drop three points off the Champions League places.
But in maintaining one of only two unbeaten home records in Ligue 1 -- the other belonging to PSG -- Willy Sagnol's side kept in the European hunt.
Lille's lethargy could only partly be explained by a draining trip to Krasnodar, in the heart of Russia, for a Europa League match on Thursday, but tired legs could not be blamed entirely for such an insipid display and lack of fight.
Bordeaux could have gone in front as early as the third minute but Thomas Toure's shot came back off the post and Diego Rolan was flagged offside as he knocked in the rebound.
Lille, who have not won for two months, largely contained Bordeaux's four-pronged attack in the first 45 minutes and even rattled their hosts five minutes from the break when Cedric Carrasso had to make a one-handed save to deny Roux.
Toure hit the post again on 50 minutes direct from a corner that caused confusion in the visiting defence.
But they finally broke the deadlock just after the hour mark as 6ft 4in (1.94m) Diabate converted a cross from Nicolas Maurice-Belay to score his sixth goal of the season.
PSG are the only unbeaten side but still trail Marseille despite Saturday's ninth consecutive win in all competitions.
Sweden striker Ibrahimovic stroked home the spot-kick just past the hour mark after Nice defenders Jordan Amavi and Romain Genevois had cleaned out Lucas in the box.
Florian Thauvin scored one goal and set up the second at the Stade Velodrome on Friday evening.
Thauvin deftly converted a Dimitri Payet cross and then saw his free-kick headed home by Rod Fanni as Marseille claimed a seventh successive home victory, their best run at the Velodrome since their 2009-10 title-winning