Forlan scored Uruguay’s opening two goals, the first a deflected 25-yard effort and the second from the penalty spot late on after an incident which saw home goalkeeper Itumeleng Khune sent off.
Alvaro Pereira than wrapped up a deserved victory for dominant Uruguay in stoppage time as the South Americans moved within touching distance of a place in the last 16.
Furious South Africa coach Carlos Alberto Parreira vented his fury at the referee, who sent off keeper Khune.
“We are very upset with this referee who ‘discovered’ a penalty against us. He is the worst referee in this competition so far and was very unfair from the start. I hope he will not get any more games. He should not be here.”
For South Africa, the defeat means they have just one point from their two matches and are now in some trouble.
South Africa captain Aaron Mokoena termed his team’s 3-0 defeat as “unacceptable”.
“We have to go on and believe. But (today’s result) was unacceptable. Hopefully we will come back against France. We have one game to go, we have to show belief.”
Uruguay started brightly and they had four early shots on goal, although none of them troubled Khune.
Siphiwe Tshabalala, whose thunderous finish gave South Africa the lead against Mexico, briefly tried to mount a fightback with two long-range efforts but neither were on target and in the 25th minute Bafana Bafana found themselves a goal down.
Forlan let fly from 25 yards and saw his effort loop over Khune with the aid of a slight but crucial deflection the ball clipping the crossbar and in.
The half-time break probably could not have come quick enough for South Africa, but it was Uruguay who continued to boss the game.
Then, from nowhere, South Africa almost snatched an equaliser in the 66th minute when Mphela got in front of Uruguay goalkeeper Muslera to get on the end of Siboniso Gaxa’s cross.
However, he could not direct his glancing header on target.
South Africa’s hopes of getting anything out of the game were crushed in the 76th minute when they conceded a penalty and lost goalkeeper Khune to a red card for clipping Suarez.
Khune protested his innocence but there was no swaying referee Massimo Busacca.
After a lengthy delay while South Africa reserve custodian Moeneeb Josephs replaced Steven Pienaar, Forlan ensured the maximum punishment from the spot to spark an early exodus for many disappointed home fans.
Those who left early missed Uruguay’s final goal in stoppage time, when Pereira bundled home Suarez’s cross from virtually on the line.
S AFRICA: Khune, Gaxa, Mokoena, Khumalo, Masilela, Tshabalala, Dikgacoi, Letsholonyane (Moriri 57), Modise, Pienaar (Josephs 79), Mphela.
URUGUAY: Muslera, Maxi Pereira, Lugano, Godin, Fucile (A Fernandez 71), Arevalo Rios, Perez (Gargano 90), Pereira, Suarez, Forlan, Cavani (S Fernandez 89).
Referee: Massimo Busacca (Switzerland).