Madrid dominated the majority of a pulsating contest at the Santiago Bernabeu and looked to have sewn up an impressive victory when Karim Benzema scored his second goal in the 79th minute.
But PSG pulled off an unlikely turnaround as Mbappe capitalised on a defensive mix-up to pull one back in the 81st minute before Pablo Sarabia, once of Real, drove into the top corner in the 83rd for 2-2.
Gareth Bale, who came on as a substitute to another mixed reception from the home fans, almost won it in injury-time but his bending free-kick struck the post.
It means PSG will go through as group winners while Madrid are guaranteed to finish second after Club Brugge drew 1-1 at Galatasaray in the early kick-off.
An excellent Madrid performance was tarnished not only by their late capitulation but also another injury to Eden Hazard, who hobbled off with what looked like an ankle injury in the second half.
Despite recovering from a hamstring strain and making his first appearance in seven weeks on Friday, Neymar was also left on the bench by PSG coach Thomas Tuchel, only to be brought on at half-time. It was his dummy that led to Sarabia's equaliser.
Madrid fans ran the rule over several players as their names were announced before kick-off, with Neymar whistled, perhaps on the assumption he will soon return to Barcelona, and Mbappe cheered, presumably in the hope he will one day join Real Madrid.
Keylor Navas, who left last summer, was also given a warm reception while the jeers for Bale were audible but noticeably less pronounced than when he came on against Leganes on Saturday.
Zinedine Zidane's press conference on Monday became another ode to Mbappe, who will reportedly be Madrid's number one target next summer.
The Frenchman, in his 100th game for PSG, looked like he wanted to put on a show, puffing out his chest after an early foul by Sergio Ramos and squeezing Zidane's hand as he fetched a ball from behind his back.
The threat of Mbappe hung over the match but Madrid were much the better side, slicker in their passing, faster with the ball and more aggressive in winning it back.
Their goal came in the 17th minute and Hazard started it, skipping between Thomas Meunier and Marquinhos before switching to the right. Isco struck Fede Valverde's pull-back against the post before Benzema showed a cool head to find the corner.
On the back foot for most of the half, PSG twice went close towards the end of it. Mbappe, slipped through by Angel Di Maria, opted to shoot when he might have squared for Mauro Icardi to tap in.
Icardi was then brought down in the area after nipping around Thibaut Courtois. Referee Artur Dias pointed to the spot before showing the goalkeeper a red card but VAR decided Idrissa Gueye had pushed Marcelo in the build-up. The penalty and sending off were cancelled.
Neymar came on to whistles at half-time and Benzema should have made it two shortly after, instead hitting the legs of Navas when free at the back post.
Madrid looked to have put the game to bed when Luka Modric ghosted clear and Marcelo's cross found the deadly Benzema free at the back post.
But the celebrations had barely finished when Mbappe pulled one back, a gift as Courtois and Raphael Varane allowed Meunier's cross to slip between them, leaving the 21-year-old with an open net.
It still felt more like a consolation but PSG had other ideas as a clever dummy from Neymar fooled the entire home defence and the ball cannoned out to Sarabia, who swept it into the top corner.
Both teams looked for a winner and PSG went close, Mbappe firing into the side-netting before Bale's bending free-kick hit the post deep into injury-time.