The Ligue 1 outfit knew a point was enough to keep the host at bay in Group F and secured exactly that thanks to captain Fekir's classy 65th-minute finish in snowy conditions.
Lyon entered the match with an outside chance of leapfrogging Manchester City into top spot, yet they were scrambling simply to secure second following Junior Moraes' opener in the 22nd minute, the Brazilian putting his team in the box seat to advance.
Paulo Fonseca's side were always on the back foot, though, and had to settle for third place and a Europa League berth after Fekir's intervention preserved his team's two-point buffer in the final table.
Lyon settled the quicker of the two teams and should have gone ahead when Bertrand Traore got the wrong side of Taras Stepanenko in the 19th minute, but Andriy Pyatov smothered bravely in a one-on-one situation.
Shakhtar soon made the reprieve count, Ismaily squaring for the unmarked Moraes - who struck twice in a 2-2 draw in the reverse encounter - to cap a patient attack with a cool finish across Anthony Lopes.
The visitor failed to resolve their profligacy before the break as Kenny Tete, Traore and Ferland Mendy all spurned good opportunities for an equaliser.
The second half unfolded in more pedestrian fashion until Fekir, among the culprits in the first half, found his radar at just the right time, lethally lashing beyond Pyatov from Memphis Depay's cut-back pass.
The France international will miss the first leg of Lyon's last-16 tie after crossing the yellow-card threshold, but for now that pales into the background of his heroics in clinching qualification.