The Brewers' starter retired 23 consecutive batters at one point and finished with a four-hitter, and Carlos Gomez went 3 for 4 with 5 RBIs, lifting the Brewers to a 5-1 win.
The Reds' wild-card lead dropped to 4 1/2 games over the surging Washington Nationals, who have won seven straight games.
Ryan Ludwick lost a ball in the lights that went for a key double, and two of Gomez's singles were bloop hits.
The Reds struggled against Lohse, but had some hard-hit balls hit directly to infielders.
"We hit the ball, actually, better than they did," Reds manager Dusty Baker said.
Gomez had a two-run single in the first, an RBI single in the third and a two-RBI single in the seventh to account for all of Milwaukee's runs.
The Brewers' center fielder was coming off a tough road trip, batting .150, and had hit only .116 against the Reds this season coming into the game.
"I guess that was his night when things like that happen over and over," Baker said. "But we didn't help ourselves on the defensive side of the ball and with walks."
There was not a lot of luck involved in Lohse's fine performance.
Cincinnati had three consecutive singles to open the second, but then had 23 batters in a row retired before Jay Bruce walked with two outs in the ninth.
"Pitching a game like this as a spoiler -- it feels good," Lohse said. "You've got to look at it as your playoff situation.
"These guys are more than likely going to be in the playoffs," he said. "We're not going to knock them out or anything. But to be able to go out there and pitch against a playoff-caliber team, it makes you feel good. That lineup can swing it quite a bit."
The Reds have dropped three of four.
"We made some hard outs, but you've got to give him a little bit of credit," Ludwick said. "He missed a lot of bats tonight. He had a lot of balls off the end of the bat."
Lohse (10-9) started the season 1-6 after missing most of spring training, signing with the Brewers as a free agent on March 25. Since the slow start, he has gone 9-3.
After allowing three consecutive singles to open the second, Lohse recorded an out on Devin Mesoraco's RBI fielder's choice grounder to third.
"He had a little trouble there in the second, but he really threw the ball well all game and even got better the later we got in the game," Milwaukee manager Ron Roenicke said.
Lohse, who went 30-11 for St. Louis over two seasons in 2011-12, walked one and struck out five. He rebounded from a poor outing in his last start, where he allowed seven runs in five innings in an 8-5 loss to the Chicago Cubs on Sept. 6.
Reds starter Mat Latos (14-6) allowed five runs -- the most he has given up since the All-Star break -- and seven hits and three walks while striking out four in 6 2/3 innings.
"It's just one of those days where you just have to hit the reset button and go after them again the next time you go out," Latos said.
Aramis Ramirez was hit by a pitch to load the bases, and Gomez hit a bloop single to right, scoring Aoki and Lucroy to make it 2-0.
Latos hit a sacrifice bunt to move Mesoraco to second, but Shin-Soo Choo struck out to end the inning. The Reds were retired in order in each inning until Bruce's walk in the ninth.
Milwaukee loaded the bases in the seventh, and Gomez hit a two-run single off reliever J.J. Hoover to make it 5-1.
Gomez also had five RBIs on July 12, 2009, while with Minnesota against the Chicago White Sox. ... Ramirez was removed after the first inning after being hit by a pitch from Latos. The team said he suffered a contusion on his left wrist and was day to day.