LaHair battled Motte for 12 pitches before drawing a one-out walk. Motte then walked Soto, before Steve Clevenger's grounder moved the runners up to set the plate for Mather.
Rafael Dolis (1-1) picked up the win in relief.
Garza has allowed three earned runs or fewer in his last 14 home starts, the longest streak by a Cubs pitcher since Mark Prior had 16 in a row over the 2004 and 2005 seasons.
Garcia threw just 85 pitches before departing with two outs in the eighth, striking out just four batters and walking one.
Skip Schumaker led off the fourth with an infield single and went to third on Matt Holliday's double down the left-field line. Schumaker scored on Carlos Beltran's groundout, and Holliday scored on Yadier Molina's sacrifice fly.
The Cubs improved to 4-7 at Wrigley Field and won for just the second time the eight games.
Chicago's 4-13 mark is its worst start since it began the 1997 season 2-15.
Holliday had two hits and scored a run for St. Louis. Schumaker, making just his second start of the season, singled and scored the other run.
Garcia gave up a first-inning run when Alfonso Soriano's sacrifice fly scored Darwin Barney, but he limited Chicago to just four hits over his final 6 2-3 innings. He was aided by double plays in the fifth and sixth.
Darwin Barney singled twice, walked, and scored the Cubs' only run. Castro legged out an infield single in the first, increasing his hitting streak to 11 games. He's reached base in 56 of his last 57 games.
The punchless Cubs went homerless for the ninth straight game, their longest drought since June 30 to July 13, 2007. Chicago is last in the majors with just five homers on the season.
NOTES: The Cubs added reliever Michael Bowden to the roster on Monday, two days after the righty was acquired with a player to be named later from the Red Sox for outfielder Marlon Byrd and cash. Bowden was 0-0 with 3.00 ERA in two appearances for Boston before being designated for assignment. . An MRI on Cardinals outfielder Jon Jay's right shoulder revealed no structural damage. Jay injured the shoulder when he crashed into the fence on Thursday in St. Louis. Manager Mike Matheny said Jay may be able to pinch-run during the series against the Cubs.
Link to boxscore: Chicago 3, St. Louis 2