Mohammed Abdellaoue scored a hat-trick for the Reds with Marko Arnautovic netting and receiving a red card for Bremen.
Claudio Pizarro gave Bremen hope of getting an equaliser when he made it 3-2 in the 83rd minute, but Thomas Schaaf's men could not find an equaliser with just 10 men.
The win lifted Mirko Slomka's side up to fourth in the table - the position they occupied at the end of last season.
Bremen remained second, but now trailing Bayern by three points.
Only a minute was on the clock when Philipp Bargfrede fouled Lars Stindl inside the penalty area and gifted the home side the chance to take an early lead.
Abdellaoue accepted it with a perfect penalty into the bottom corner of Sebastian Mielitz's goal.
Bremen responded well and Pizarro had a few chances to level before Abdellaoue doubled the home side's lead.
Jan Schlaudraff raced down the right, launching a quick counter-attack and delivering a perfect assist for Abdelloue to score his and Hannover's second.
Schlaudraff almost added a third less than five minutes later, but his lob hit the bar.
Arnautovic reduced the arrears deep in stoppage time in the first half with a fine shot into the bottom corner after being found on the edge of the area by Pizarro.
Abdelloue restored Hannover's two-goal advantage after an hour when he pounced on a header from Sergio Pinto from close range.
He was then given a standing ovation as he made way for last season's top scorer Didier Ya Konan having done his job for the day.
Arnautovic's afternoon was done too in the 78th minute when he stamped down on the foot of Pinto and was shown the red card.
Bremen warned their hosts that the overall job was not done as Pizarro brought the visitors back to within a goal in the 83rd minute with a fine volley into the bottom corner, but they were unable to find a third.