The 40th career meeting between the golden duo with 38 Grand Slam titles between them, swung this way and that before Federer seized control to claim a 7-6(3) 1-6 6-3 6-4 victory.
World number one and defending champion Novak Djokovic now stands between the 37-year-old Federer, the oldest finalist here since Ken Rosewall in 1974, and a record-equalling ninth Wimbledon title in Sunday's showpiece.
"Rafa played some unbelievable shots to stay in the match. The match was played at a very high level.
"It was a joy to play today," he added after reaching his 31st Grand Slam final.
After edging a tense first set by taking the last five points of the tiebreak, Federer was overpowered in a 36-minute second as Nadal, eyeing a first Wimbledon title for nine years, appeared to have wrestled control.
Federer's fans inside Centre Court and those massed on 'Henman Hill' watching the drama unfold on the giant screen, need not have worried though as the second seed proved he had plenty left in the tank.
Playing with relentless aggression Federer began to dictate from the baseline and broke early in the third set, held off a fierce Nadal counter-attack in the next game, then swept back into a one-set lead.
The 33-year-old Spanish warrior was never going to slink away without a fight though.
He clung on at 3-5, saving two match points, then had a break point as Federer served for the match.
The ice cool Swiss fended off that danger and unloaded everything in his arsenal at Nadal in two more break points, only to see victory snatched away by two sublime winners off the indefatigable Spaniard's racket.
A fifth match point arrived though and as Nadal swung a backhand over the baseline Federer pumped his arms above his head to celebrate only his fourth Grand Slam win over the Spaniard he has battled around the world for 15 years.
"Today it's sad for me because chances are not forever," a deflated Nadal said. "He played a bit better than me, I had a few small chances but didn't convert them."