In the fight before Williams' stirring victory, Rocky Juarez had a big third round and outpointed Kamil Dzamalutdinov of Russia at 125 pounds and will join Williams going for gold Sunday afternoon.
Jermain Taylor of Little Rock, Ark., boxed Yermakhan Ibraimov of Kazakstan in a 156-pound semifinal later.
American boxers have not won more than one gold medal since the 1988 Olympics, when they got three.
Williams' victory was the first for an American in three matches at these games. In six Olympics, Cubans have won 16 of 24 bouts against Americans.
The 19-year-old Williams, a left-hander from Cincinnati, used crisp counterpunching to off-set Luna's right-handed power in a bout marked by toe-to-toe exchanges.
Luna led 12-10 after one round and 25-19 after two. Then Williams, throwing flurries, outscored the Cuban 16-8 in the third round for a 35-33 lead.
With a large crowd in the Sydney Exhibtion Center roaring, Williams built a 39-35 lead in the final 2 minutes before Luna stormed back to tie at 40-40. Williams then got into scoring blows in the closing seconds for the victory.
Juarez, a 20-year-old world champon from Houston, landed jabs, hooks and even right leads to outscore the Russian 9-3 in the third round for a 16-7 lead and was never in danger of losing.
Juarez will box Bekzat Sattarkhanov of Kazakstan in his final, and Williams will box Mahamadkadyz Abdullaev of Uzbekistan.