Wales ledde till att gå in i de sista 10 minuterna men slutligen dukade efter att ha uthärdat en andra halv misshandel.
Fly-halva Handre Pollard sparkade fem straff och en droppe mål för Springboks.
Wales 'Dan Biggar gjorde 14 poäng och skapade chansen för Gareth Davies att göra sitt femte försök i turneringen.
Veteran scrum-halv Du Preez måste övertalas att spela i turneringen av Sydafrika tränare Heyneke Meyer efter en serie karriär-hotande skador, men återbetalade tron med ett ögonblick av svalka i en tumultartad atmosfär.
Sydafrika står nu inför Nya Zeeland i de sista fyra efter världsmästarna förintade Frankrike 62-13 i lördagens andra kvartsfinal.
Springboks pack gav en powerhouse display i andra halvan, men möttes av extraordinära walesiska försvar med kapten Sam Warburton ger en enastående visning.
Men ett smart drag från en scrum i Wales 22 såg nummer åtta Duane Vermeulen mata Du Preez, som utnyttjade en enorm lucka på blindsidan för att dyka över i hörnet.
En annan veteran, flanker Schalk Burger, var enastående när Springboks vände skruven.
Det fanns nyanser av Wales "före turnering nederlag av Australien i de inledande minuterna som George North drogs ner utanför linjen. Sedan blåste Wales en överlappning när Gethin Jenkins lobbed pass gick över centrum Tyler Morgan huvud och i kontakt.
Trots att walesiskan låg bakom när Wayne Barnes straffade dumma misstag och den oklanderliga Pollarden var olidlig med sin känga.
Slaget om sammanbrottet vanns av Sam Warburton och Gethin Jenkins för Wales och Duane Vermeulen och Bryan Habana för Sydafrika.
Wales 13-12 bly i intervallet var tack vare en fullblodig framåt ansträngning och briljansen av Biggar, vars drop-goal kantade dem framåt efter hans chip-and-gather hade satt upp Davies försök.
En kaotisk start på andra halvan såg Biggar spika en lång rad straff, innan Sydafrika - med Vermeulen, Burger, Eben Etzebeth och Lood de Jager i förtruppen - steg upp en växel.
Pollards drop-goal fick Boks tillbaka till en punkt, men han missade två straff för att förstöra en annars utmärkt uppvisning.
Wales hängde på som Willie le Roux skar igenom, men för alla deras dominans, Springboks återtog bara ledningen när Pollard återupptäckte sitt sortiment med ett straff att kant hans sida framåt 18-16.
Biggar satte Wales tillbaka på 19-18, men med Gatlands män gör mer än dubbelt så många tacklingar som deras motståndare, det var för mycket för ett lag som hade överlevt dödsgruppen att hänga på i ansiktet av vågor av attacker.
Sydafrika flanker Schalk Burger trotsade åren med en mödosam visning av ball-carrying och tackla. Vintagegrejer.
Warren Gatland: " Vi vill inte komma med några ursäkter. Sydafrika vann... och vi var inte tillräckligt bra för att vinna.
"I slutet av dagen gjorde Sydafrika det Sydafrika gör. De fick en chans och de tog den och det blev resultatet."
Läs mer från Gatland här.
Sydafrika: Le Roux; Pietersen, Kriel, De Allende, Habana; Pollard, Du Preez (kapt); Mtawarira, B du Plessis, Malherbe; De Jager, Etzebeth; Burger, Louw, Vermeulen.
Ersättningar: Strauss for Du Plessis (55), Nyakane for Tendai Mtawarira (56), J Du Plessis for Malherbe (60), Du Toit for Etzebeth (67), Alberts for Louw (67), Lambie for Pollard (76), Serfontein for Kriel (67).
Oanvänd: Pienaar
Wales: Anscombe; Cuthbert, Morgan, Roberts, North; Biggar, G Davies; Jenkins, Baldwin, Lee; Charteris, AW Jones; Lydiate, Warburton (kapt), Faletau.
Ersättningar: Owens for Baldwin (56), James for Jenkins (55), Francis for Lee (55), Davies for Charteris (63), Tipuric for Lydiate (67), L Williams for G Davies (70), Priestland for Biggar (73), Hook for Morgan (67).
Fourie du Preez 75-minuters försök slutade slåss Wales "VM dröm i en kolossal kvartsfinal mot Sydafrika på Twickenham.