After the first half where he clearly struggled for mobility in driving rain, playmaker Fekir was taken off.
Hoping to build confidence before hosting City on Tuesday, Lyon was far from convincing, lacking ambition and aggression in the first half where Saint-Etienne posed the greater threat, forcing saves from Lyon goalkeeper Anthony Lopes.
But with Maxwel Cornet replacing Fekir and a new mindset, Lyon was far more enterprising in the second half. It was rewarded with the winning goal from defender Jason Denayer in the 62nd minute.
Forward Memphis Depay earned and took the corner that Denayer headed in, having shaken off his marker to find space. Depay has been directly involved in 10 of Lyon's 24 league goals.
A straight red card for Rafael made the last 25 minutes harder than they needed to be for Lyon. Referee Antony Gautier didn't hesitate in sending off the defender for a two-footed lunge on Saint-Etienne's Yann M'Vila.
Lyon was 12 points behind runaway league leader Paris Saint-Germain, but vaulted from fourth place to second.
Since losing to PSG 5-0 in October, Lyon has gone unbeaten in seven games in all competitions. It beat City 2-1 in their last meeting in September.