Former Bayern midfielder Luiz Gustavo was sent off for the second time in his third game for new club Wolfsburg, which lost 3-1 at Bayer Leverkusen.
Kevin-Prince Boateng's first goal for Schalke was enough for a 1-0 win at Mainz. The former AC Milan midfielder ran at the home side's defense, feigned to shoot, and unleashed a fine effort past Mainz goalkeeper Heinz Mueller in off the far post.
Eintracht Frankfurt won 3-0 at 10-man Werder Bremen, and Augsburg came from behind to beat Freiburg 2-1.
In the late game, Dortmund striker Pierre-Emerick Aubameyang scored in the 19th and fellow offseason signing Henrikh Mkhitaryan made it 2-0 three minutes later, when Robert Lewandowski backheeled the ball for Mkhitaryan to take in stride and slot inside the left post.
Hamburg defender Lam Zhi-Gin pulled one back four minutes later with a perfectly struck curling shot inside the far post.
Dortmund twice hit the crossbar before Heiko Westermann scored an unlikely equalizer with Hamburg's second attempt in the 49th.
Dortmund hit the crossbar yet again, and Rene Adler made a host of saves, before Mkhitaryan set up Aubameyang for his second in the 65th.
Lewandowski made it 4-2 in the 73rd, when Reus left Aubameyang's cross through for the Poland striker to place it inside the right post.
Reus fired to the far corner in the next minute before Nuri Sahin crossed for Lewandowski to wrap up the win with a header in the 81st.
Bayern winger Arjen Robben was involved in both of his side's goals. The Dutch winger sent Toni Kroos through on the left to cross for Mandzukic to score with a simple finish.
Ron-Robert Zieler saved Robben's effort from a tight angle after he'd combined on the left with Ribery, only for the Frenchman to tuck away the rebound which fell kindly between two Hannover defenders.
"We were orderly and played with courage," Hannover coach Mirko Slomka said. "But to get more (from the game) you have to score a goal."
It was another day to forget for Luiz Gustavo, who was sent off in the 85th for a second yellow card, five minutes after earning the first for protesting a referee's decision.
"It was the fourth red card for us in the fifth game," Wolfsburg coach Dieter Hecking said. "That's from only five fouls in all games. I have to make clear we're not a dirty team."
Leverkusen captain Simon Rolfes sprung the offside trap with a brilliant ball over the top for Sidney Sam to slot past Diego Benaglio in off the far post in the 24th.
On his 34th birthday, Ivica Olic equalized with a volley in the 39th, before Luiz Gustavo's long-range effort crashed back off the crossbar.
Stefan Kiessling restored Leverkusen's lead with a header from a free kick in the 65th, and then wrapped up the win with a wonderful strike in injury time.
Vaclav Kadlec got Frankfurt off the mark in the 14th when he got ahead of his marker to convert Bastian Oczipka's cross from close range.
Cedrick Makiadi struck the post as Bremen sought a response, before Franco di Santo was sent off in the 26th for catching Oczipka badly in the head with his boot.
It got worse for Bremen in the 34th when Kadlec an offseason signing from Sparta Prague headed in his second.
Aaron Hunt earned a dubious-looking penalty but the Bremen captain had his spot kick saved by Kevin Trapp, and an own goal from Sebastian Proedl in the 77th completed a miserable afternoon for the home side.
Tobias Werner's last-minute winner gave Augsburg three successive Bundesliga victories for the first time.
Halftime substitute Admir Mehmedi scored seconds after going on for Freiburg, but Halil Altintop equalized in the 61st and Werner emerged to become the hero.
"We fought brilliantly," Augsburg coach Markus Weinzierl said.