Dortmund looked set for their first away win of the campaign on the back of Shinji Kagawa's well-taken 63rd-minute strike, but with four minutes to go Karim Haggui struck an equaliser and Didier Konan then kept his cool to win it in the dying seconds.
The result means Dortmund have lost three of their opening six games after waltzing to the title last season.
Dortmund had started strong, with Ivan Perisic testing Ron-Robert Zieler from distance in the 17th minute before using a neat one-two to set up a shooting opportunity from the which the goalkeeper did well to parry the ball away.
However, Hannover showed they could be dangerous on the break moments later. Konan broke free to send a powerful shot goalwards and Roman Weidenfeller could only push the ball back out to Moritz Stoppelkamp, who was denied by a goal-line clearance from Neven Subotic.
At the other end, Ilkay Gungodan skillfully beat two men but the long-range shot that followed was optimistic and Zieler easily gathered.
Hannover nearly snatched a half-time lead when Christian Pander's free-kick curled around the wall and went just inches wide of the post.
There was a brilliant chance for the hosts just after the hour-mark when Moritz Stoppelkamp's shot took a wicked deflection but Weidenfeller did brilliantly to adjust and tip the ball over the crossbar.
And Dortmund took full advantage as they took the lead moments later.
Kagawa picked up the ball on the edge of the area and curled a wonderful shot into the bottom left-hand corner.
But just as the champions were thinking about their first away win of the campaign, Pander sent a free-kick into the area, and Haggui nodded home.
They then completed an amazing comeback three minutes later, with Sergio Pinto crossing for Konan to coolly slot the ball into the corner of the net from close range.