Two goals inside three second-half minutes, from Wesley Sneijder and Arjen Robben, steered the Dutch into the decider and shattered South American hopes.
Veteran Dutch captain Giovanni van Bronckhorst gave his side the lead on 18 minutes with a stunning 35-yard strike before Diego Forlan produced an equally memorable goal four minutes before half-time to keep Uruguay alive.
Maxi Pereira got one back for Uruguay in injury time but it was too little too late.
The last time Holland made it this far was 32 years ago when they fell at the last hurdle to hosts Argentina 3-1 after extra-time.
Coach Bert van Marwijk will be desperate to avoid a similar fate in the final on Sunday as the Dutch bid to lift the World Cup for the first time in their history.
Despite losing, Uruguay did their small nation proud with coach Oscar Tabarez guiding them to their first semi-final in 40 years.
It was a massive achievement for a country with a population of just 3.4 million, and they must now put their disappointment behind them for a third-place play-off on Saturday.
The Netherlands came into the match as overwhelming favourites after winning all their games in South Africa to go with the eight wins out of eight notched up in qualifying.
Both teams were forced to make changes with players suspended and in chilly conditions at Green Point Stadium it was the Dutch who adapted the best.
They had a decent chance as early as the third minute when Robben whipped in a teasing cross which Fernando Muslera punched straight to Dirk Kuyt on the edge of the box, but the Liverpool winger skied his shot.
The dangerous pair created another opportunity soon after when Kuyt sent in a cross that the Bayern Munich star headed at the keeper.
With the pressure on, it was only a matter of time before the deadlock was broken and it was their hugely experienced captain who did it with a contender for goal of the tournament.
The 35-year-old van Bronckhorst picked up the ball some 35 yards out and let rip with a stunning drive that tore into the top corner of the net past the outstretched fingertips of Muslera.
It should have been 2-0 on the half-hour when Arsenal’s Robin Van Persie made an excellent turn to pick out Robben on the edge of the box, but Martin Caceres made a timely intervention.
Uruguay were struggling to create openings before Forlan produced his own piece of magic with a left-foot screamer that swerved past keeper Maarten Stekelenburg, who should have done better.
Holland looked to up the tempo in the second half but it was Uruguay who nearly took the lead when Khalid Boulahrouz’s back-pass fell short and Edinson Cavani challenged the keeper.
Stekelenburg’s clearance hit Cavani and he teed up Alvaro Pereira, but his floated effort was headed away from danger.
The match was finely poised with both sides creating chances but it was Sneijder who did the damage with his fifth goal of the tournament.
The Inter Milan star unleashed a low right foot drive that took a deflection to put his team in front on 70 minutes.
Uruguay were stunned and Robben took advantage of their guard being dropped with another goal three minutes later with a fabulous header from a Kuyt cross.
The South Americans threw everything they had at Holland as the clock ticked down and got their reward with Pereira’s goal in the second minute of injury time but by then the match was over.