The run-starved Royals, who earlier in the day hired Hall of Famer George Brett as interim hitting coach, managed just four hits but parlayed the hits by Francoeur and Hosmer with a walk, a hit-by-pitch and an error into the winning rally to snap an eight-game losing streak.
The game ended about 3:30 a.m. because of a 4 1/2-hour rain delay in the ninth and a 1-hour weather delay at the start of the contest.
The ninth-inning letdown spoiled a sharp major-league debut by Cardinals pitcher Michael Wacha, who retired the first 13 batters he faced and allowed just two hits and one run while striking out six over seven innings.
St. Louis reliever Mitchell Boggs (0-3) came in in the ninth with a 2-1 lead but Francoeur hit his second pitch for a tying home run.
Alex Gordon walked and Victor Marte replaced Boggs. Marte's first pitch hit Alcides Escobar and he then made an error allowing David Lough to reach and load the bases. Hosmer followed with a two-run double to right.
When Greg Holland retired St. Louis in order in the ninth after the long delay, he had his eighth save and Louis Colman (1-0), with 1 1/3 inning of no-hit relief, got the win.
The Cardinals managed just eight hits, with four coming in a two-run first inning when Allen Craig and David Freese drove in runs. Both Kansas City hits off Wacha came in the fifth when Lorenzo Cain doubled and Elliot Johnson drove him in with a single.
Benedict Cumberbatch's dramatic reading of R. Kelly lyrics is just what you need
Kate Middleton recycles dress at movie premiere