Gladbach, who terrorised lacklustre Bayern with a string of lightning-quick breaks, clinched a league double over the visitors.
Bayern, beaten 1-0 by the same team on the opening day of the season, could not find much creative spark in the absence of suspended winger Franck Ribery.
"We lacked any punch today. The breaking point was the second goal just before the break," Bayern coach Jupp Heynckes told reporters.
"It was difficult to come back after that."
The hosts, who narrowly avoided relegation last season, needed a rare but spectacular Manuel Neuer blunder to take the lead in the 11th minute.
The goalkeeper's mis-placed pass found Reus and he fired into an empty net from 30 metres to claim his 10th league goal of the campaign.
Earlier this month Gladbach's top scorer Reus agreed to join Borussia Dortmund at the end of the season. Media reports said the fee would be 17 million euros.
Bayern, chasing a domestic double and still in the Champions League, almost levelled when Mario Gomez's point-blank header was palmed away by Marc-Andre ter Stegen.
Gladbach then struck on the break in the 41st minute with Mike Hanke's long pass sending Herrmann through and the 20-year-old beating Neuer with a low drive.
Herrmann then combined with Reus in another quick break after 71 minutes before coolly rounding Neuer for the third goal.
Bastian Schweinsteiger cut the deficit with a close-range shot five minutes later but it was too little too late for Bayern.
"My team did well tonight," said Gladbach coach Lucien Favre. "We played a very tactical game."
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.