Bundesliga Wrap: Werder Bremen, Augsburg win
Robin Dutt's side fell behind in the 20th minute when Szabolcs Huszti put the visitors in front from the penalty spot, before Aaron Hunt responded with a spot kick of his own five minutes later to level the scores.
Cedric Makiadi then gave the home side the lead for the first time seven minutes before the break but, once again, parity was restored almost immediately as Hiroki Sakai struck for Hannover three minutes later.
It looked as though both sides would have to settle for a draw until four minutes from time when Santiago Garcia netted the winner as Bremen ended a run of four games without a win to climb above their opponents, who are now winless in five outings.
In Sunday's other Bundesliga fixture, Augsburg claimed their first win in six with a 2-1 home success over 10-man Mainz.
Andre Hahn netted the opener for the hosts after 26 minutes, before doubling his side's advantage with his second goal four minutes into the second period.
Substitute Maxim Choupo-Moting pulled a goal back for the visitors with a penalty a minute after coming on just before the hour mark before another substitute, Christian Wetklo, was shown a straight red card with two minutes to go.
The result leaves Mainz in 12th place with just one win in their last nine Bundesliga games.