Dortmund win protects seven-point lead
Lucas Barrios struck twice and Kevin Grosskreutz added another late in the game after Mario Goetze shook off four defenders in a solo effort to cancel out Hanover's lead which was given to them by Mohammed Abdellaoue in the 57th minute.
Dortmund's first victory in three games lifted them to 65 points. Second-placed Leverkusen, who won 1-0 at Kaiserslautern, are on 58 with six games left.
"After a difficult first half for both teams we were suddenly 1-0 down but we got a fantastic equaliser that gave us a lot of confidence," said Dortmund coach Jurgen Klopp.
Champions Bayern Munich leapfrogged Hanover into third place on 51 points with a nervy 1-0 win over bottom club Borussia Moenchengladbach thanks to an Arjen Robben goal in the 78th minute.
Bayern are desperate to finish at least third to get a shot at playing in the Champions League next season.
Hanover are a point behind on 50 while Gladbach's hopes of staying up are nose-diving on 23 points, five from the relegation play-off spot.
"Clearly this was not our best game this season," said Bayern coach Louis van Gaal who will be leaving at the end of the campaign. "But I am happy with the result because we are finally in third place."
Dortmund looked to have their work cut out as Hanover, eager to continue their spectacular season, came out attacking on a sunny afternoon in front of 80,000 fans.
The hosts, who had managed just one point in two games as their 12-point lead was slashed, responded with Paraguay international Barrios twice going close in the first half.
Abdellaoue then crept in at the far post to tap in a Sergio Pinto cross for Hanover in the 57th minute.
Dortmund reacted instantly with teenager Goetze picking the ball up 40 metres out and scoring after weaving past four defenders.
Barrios made amends for his earlier misses, timing his header perfectly to score in the 64th minute before notching his 13th league goal of the season in the 73rd after a clever Goetze pass.
Grosskreutz completed the rout in the 83rd minute to keep Dortmund on track for their first Bundesliga title since 2002.
On Friday, the match between St Pauli and Schalke 04 was abandoned two minutes before the end after a fan hit a linesman with a beer cup with Schalke leading 2-0.
A German football federation decision is expected in the next few days, with mid-table Schalke likely to be awarded three points and St Pauli facing a fine or sanctions.