Argentina avenged their loss to Australia in the Sydney Olympics final when they beat the defending champions and host-nation 1-0 before the Dutch defeated China by the same score.
Agustina Garcia scored the match winner for Argentina after a clever lead-up from midfielder Luciana Aymar.
The 25-year-old set off on a weaving run to open up space for Garcia who netted the only goal, and her eighth of the tournament, in the eighth minute.
Australian coach David Bell said his team's defence had let them down at the crucial moment but he conceded the South Americans, who had never beaten
"There was only one goal scored in a pretty reasonable game of hockey," Bell said.
"(But) the goal was one that we would normally have not let in and that causes problems."
The Netherlands ended their jinx away from home when they qualified for their first major final on foreign soil in the past decade with a hard-fought victory over the Chinese.
Dutch midfielder Macha van der Vaart struck the decisive goal in the 37th minute when she deflected a cross into the Chinese net.
Australia and China will meet in Sunday's third-place match while the playoffs for 5th-16th positions take place on Saturday.