The hosts broke the deadlock after only two minutes in a match filled with high-quality goals, but Layvin Kurzawa's equaliser right on the stroke of half time appeared to be enough to have earned Unai Emery's side a point - even after they had seen Dani Alves sent off.
It took just two minutes for Lyon to stun the runaway league leaders, and the opening goal came in some style too as Nabil Fekir caught Alphonse Areola off guard with a clever long-range free kick, curling his finish past the keeper when everyone was expecting a cross.
Edinson Cavani went into the game still needing just one goal to become PSG's outright leading scorer of all time, and the record nearly came in spectacular fashion when he fired a first-time 45-yard effort towards goal after the keeper had come off his line to sweep up a through-ball. The Uruguayan's effort dropped just wide of the target, though.
The match continued to ebb and flow with sights of goal at both ends, but PSG suffered a blow with 10 minutes remaining until half time when Kylian Mbappe was stretchered off the field following a heavy collision with Lopes.
Nonetheless, PSG still managed to find an equaliser with virtually the last action of the first half as Kurzawa produced a sensational first-time volley which ripped into the roof of the net to leave the Lyon keeper no chance.
Lyon were more than holding their own against the might of PSG, though, and their hopes of inflicting only a second league defeat of the season on them were boosted when Dani Alves was shown a straight red card shortly before the hour mark.
The full-back was initially only going to be shown a yellow for a late challenge from behind, but his angry reaction to the decision led referee Clement Turpin to give the Brazilian his marching orders instead.
Lyon almost took immediate advantage of their numerical superiority when Mariano Diaz raced through on goal, but Areola was equal to his subsequent low strike.
The hosts came close again with just over 10 minutes of normal time remaining when a scramble in the area saw the ball strike the back of Rafael's head from close range, although PSG were fortunate to see it loop over the crossbar rather than in.
PSG's own attacking threat had diminished following the red card, and they needed Areola to come to their rescue again with five minutes remaining when he parried Maxwel Cornet's low shot away from goal.
Lyon did finally get the winning goal with the last meaningful action of the contest, though, as Depay worked space to shoot before lashing a 25-yard effort past a statuesque Areola in the fourth minute of injury time.
There was no time for PSG to respond as they fell to a rare defeat, leaving them now only eight points clear at the top of the table whereas Lyon climb up to second to establish themselves as the capital outfit's closest challengers.
LYON (4-3-3): Lopes; Rafael, Marcelo, Morel, Mendy; Fekir, Tousart, N'Dombele; Cornet, Diaz (Traore, 77'), Aouar (Depay, 69')
PSG (4-3-3): Areola; Alves, Marquinhos, Silva, Kurzawa; Verratti (Pastore, 87'), Lo Celso, Rabiot; Mbappe (Draxler, 36'), Cavani, Di Maria (Meunier, 61')