In their 58th career clash, Djokovic triumphed 3-6, 6-3, 7-6 (7/4), 6-2 and stays on course to capture a 19th Major and become the first man in over 50 years to win all four Slams twice.
Djokovic, the 2016 champion in Paris who had also beaten Nadal at the 2015 tournament, will face Stefanos Tsitsipas in Sunday’s final in what will be his 29th championship match at the Slams.
Tsitsipas had earlier become the first Greek to reach a Grand Slam final with a 6-3, 6-3, 4-6, 4-6, 6-3 victory over Germany’s Alexander Zverev.
Nadal, 35, remains tied on 20 Majors with Roger Federer.
“It was a privilege to face Rafa in such an incredible match,” said Djokovic after four hours and 11 minutes of intense action.
“Tonight it was my greatest ever match in Paris.”
He now leads Nadal 30-28 in their career rivalry.
“It’s hard to find words for Rafa’s achievements at Roland Garros. The amount of wins on this court is incredible,” he added.
“You have to climb Mount Everest when you meet him here.”
It was Djokovic’s second win in eight meetings in Paris with Nadal, a sequence which also included three losses in finals.
It was Nadal’s first defeat in 14 semifinals in the French capital.
“Probably it was not my best day today, even if I fought,” said Nadal.
“Sometimes you win, sometimes you lose. I had a big chance. There were some crazy points but there was fatigue there.”
Djokovic finished with 50 winners; Nadal committed 55 unforced errors under the relentless assault.
Djokovic had two break points in the opening game of the first set which stretched to 10 minutes but was unable to convert.
Nadal made him pay, sprinting away for a 5-0 lead before the top seed got on the board.
Djokovic clung on, retrieving one break to get to 2-5 but Nadal eventually prevailed after one hour on court even if he required seven set points to edge ahead.
The old rivals exchanged breaks in the second and third games of a big-hitting second set but it was Djokovic who repeated the feat for a 4-2 lead before levelling the tie.
Twice in the third set Djokovic edged ahead, only to be reeled back in by Nadal who broke back in the 10th game as the world No 1 served for the set.
Djokovic then saved a set point with an ice-cool drop shot in the 12th game.
A 92-minute third set ended with Djokovic taking the tiebreak.
In a further twist on a dramatic evening, the 5,000 spectators inside Court Philippe Chatrier were allowed to watch the conclusion of the match despite it passing the 11pm Covid-19 curfew.
“In agreement with the national authorities, the match will come to an end in your presence,” said a stadium announcer told delighted fans.
“Thank you Macron! Thank you Macron!” in gratitude to the apparent intervention of the French President.
Nadal then broke in the first game of the fourth set but Djokovic levelled for 2-2 and broke again for 4-2.
He finished it off on a second match point when Nadal hit wide and long to conclude a match on the same court where they first met in 2006.
‘Intense’ for Tsitsipas
Earlier, fifth-seeded Tsitsipas ended a streak of three successive semifinal losses at the Majors.
“All I can think of is my roots, a small place outside Athens where I dreamed to play on the big stage at the French Open,” said a tearful Tsitsipas after securing victory on a fifth match point.
“It was nerve-wracking, so intense, I stayed alive. I went out there and fought. This win means a lot, it’s the most important one of my career so far.”
Tsitsipas, 22, is the youngest Grand Slam finalist since Andy Murray at the 2010 Australian Open.
“I don’t particularly care about semifinals. Might sound arrogant. I’m not trying to be arrogant. I’m just saying it how it is,” said Zverev.
Tsitsipas will have his work cut out on Sunday – he is 2-5 against Djokovic including defeat in the semifinals in Paris last year.