Lionel Messi made limited impact on his Parc des Princes debut during the match.
Icardi headed home from Kylian Mbappe’s cross four minutes into stoppage time after Neymar had levelled with a penalty following Lucas Paqueta’s second-half opener as leaders PSG maintained their perfect record with 18 points.
Messi, in his third appearance for the capital side, hit the woodwork but failed to score and was substituted in the 76th minute.
Lyon, who made a stuttering start to the season but have been improving recently, are ninth with eight points.
While Olympique de Marseille moved up to second on 13 points from five games after a convincing 2-0 victory against Stade Rennais.
“Its a really important victory against a very good Lyon side,” said PSG coach Mauricio Pochettino.
“The team showed their character after conceding the goal and that’s the most important thing tonight.
“Now we need to work a lot to find our balance.”
Pochettino opted for an attacking line-up with Messi, Neymar, Mbappe and Angel Di Maria in front of a two-man midfield featuring Idrissa Gueye and Ander Herrera.
While Gianluigi Donnarumma started his second Ligue 1 game after Keylor Navas started in the Champions League.
Messi looked more lively than against Club Brugge on Wednesday, forcing Anthony Lopes to a great save with a low crossed shot on 32 minutes after a clever backheel from Neymar.
Four minutes later, his 25-metre curled free kick crashed onto the bar.
Lyon went ahead nine minutes into the second half when Karl Toko Ekambi played Paqueta through for the Brazilian to beat Donnarumma at the end of a late run into the area.
It spurred PSG back into action and Neymar, who was close to his best form, was brought down in the box.
The Brazil forward coolly slotted the ball past Lopes to convert the resulting penalty in the 66th minute.
Messi looked puzzled when he was replaced with fullback Achraf Hakimi, whose runs down the right flank were sorely missed by PSG.
Lyon coach Peter Bosz replaced Xherdan Shaqiri with Rayan Cherki with the hope of grabbing all three points.
But it was the hosts who scored the winner when Icardi, who came on for Di Maria in the 82nd minute, found the back of the net.