The 16-year-old Yamal cancelled out Randal Kolo Muani's opener with a sublime shot in the 21st minute to become the youngest scorer in a Euro or World Cup tournament before Olmo added another in the 25th for his third goal in the knockout stage.
The Spaniards, who have won every game of the tournament so far, confirmed their favourites tag with another display of attacking football, especially in the first half, that is a far cry from the tiki-taka passing game that earned them world and European titles more than a decade ago.
"I'm very happy to have made it to the final," said man-of-the-match Yamal. "Now the most important thing is to win it. We were in a difficult moment, you wouldn't expect a goal so soon.
"I wanted to put it in where it went in, and I'm very happy. I'm happy and content with the victory. I want to win, win and win," added the teenager.
They will now face the winners of Wednesday's match between England and Netherlands in the final in Berlin on Sunday as they hunt a record-breaking fourth European crown.
Spain had an early chance when Yamal, the youngest player to feature in a World Cup or Euro semi-final, floated a cross to the far post but Fabian Ruiz headed over the bar.
France did better from an almost identical move in the ninth minute with Kylian Mbappe, playing without a mask after breaking his nose earlier in the tournament, crossing for Kolo Muani to head in their first goal from open play at Euro 2024.
Yamal curled a stunning left-footed effort from 25 metres in off the post to break another record held by Brazil great Pele, as the youngest scorer in a Euro or World Cup.
Before France had any time to recover Olmo completed their lightning-quick comeback in the 25th with a shot that was deflected in by France's Jules Kounde.
France, who had only conceded one goal in their previous five games in the tournament, upped the tempo after the break and had chances through Mbappe and Theo Hernandez.
But the 2022 World Cup finalists, who have struggled with scoring throughout the tournament, could not carve out an equaliser with Spain, pulling back and successfully soaking up the pressure.