The Dutch went 2-1 ahead when defender Kyle Walker turned the ball into his own net after a mistake by team mate John Stones in the 97th minute and Quincy Promes completed the scoring in the 114th after Ross Barkley gave the ball away.
England thought they had scored in the 83rd minute when Jesse Lingard ran on to Barkley's pass to find the net but he was ruled a fraction offside after a two-minute VAR review.
The Dutch will face hosts Portugal in Sunday's final in Porto, while England were left to contemplate a fourth successive competitive semi-final defeat following their losses at the 1990 and 2018 World Cups and Euro 96.
"It was a war of attrition," said Netherlands coach Ronald Koeman. "We have beaten Germany, France and now the number four team in the world – this reflects our development. We haven't played semi-finals and finals so this is new to us but we're taking it in our stride."
It was the Dutch defence that initially went to pieces when the highly-rated Matthijs De Ligt failed to control a pass and tripped Marcus Rashford when the England forward slipped past him, giving away a penalty.
Rashford calmly sent Jasper Cillessen the wrong way from the spot in the 32nd minute.
England nearly returned the gift early in the second half when Walker was dispossessed by Memphis Depay but his shot was blocked by goalkeeper Jordan Pickford.
By now, though, the Dutch were in control and, while much of their possession was unproductive, they deservedly levelled with a powerful De Ligt header in the 73rd minute as the 19-year-old atoned for his earlier mistake.
England produced what they thought might be the winner with a flowing move which started on their own goal line. The ball found Raheem Sterling, who flicked it to Barkley and he slipped it through for Lingard to score.
But, with the celebrations complete, the referee chalked it off after Lingard was shown by VAR to be centimetres ahead of the last man.
After that, it all went downhill for England.
Seven minutes into extra time, Stones dwelled on the ball on the edge of his area and was dispossessed by Depay, whose shot was brilliantly parried by Pickford.
However, the ball broke loose, Promes got there first and, although he failed to make proper contact, it hit Walker and trickled into the net.
Another England fiasco followed when Barkley's heavy touch from a pass allowed Depay to nip in and he laid the ball off for Promes to seal the deserved Dutch win.
"We made too many mistakes in our third of the pitch, partly because of that pressure and partly because of errors by us," England manager Gareth Southgate said.
"It's very painful for everybody, it's a night where we have learned so much. It was tough to take in the end because you get to another semi-final, it should be a positive but everybody leaves even more deflated."
(Reporting by Brian Homewood; editing by Ken Ferris and Ed Osmond)