A clumsy own goal by Christian Schulz, a sublime strike by Max Kruse and a strike by Jonathan Schmid in the second half secured Freiburg's victory. Hannover's goal came from Konstantin Rausch in the first half.
Freiburg's third consecutive victory put the small club within range of even a place in the Champions League, depending on other results over the weekend. Freiburg is now provisionally fifth, equal on points with fourth-place Schalke.
But coach Christian Streich tried to play down the expectations.
''I am surprised that my team is playing at his level ... we strive to win the ball as quickly as possible. Our goal for the next season is to remain in the Bundesliga,'' Streich said.
Hannover, meanwhile, suffered a setback in its efforts to clinch a place in the Europa League for the second straight season.
''We beat ourselves, on their third goal we had possession and then produced three mistakes. Then we missed our chances. Winning a place in the Europa League now looks virtually impossible,'' Hannover coach Mirko Slomka said.
Freiburg went ahead in the 25th following a huge blunder by Ron-Robert Zieler, Germany's third-choice goalkeeper, who completely mistimed his exit for a harmless cross. The ball flew over the unchallenged Zieler and struck Schulz, who was taken by surprise and put it into his own net.
The equalizer came 11 minutes later, after another defensive error, this time by Freiburg. Mame Diouf beat Zieler to the ball and then squared it for Rausch, whose first-time effort struck into the roof of the net.
Kruse, one of the hottest Bundesliga players at the moment, put Freiburg ahead for good in the 44th. Kruse controlled a cross from Schmid and - while surrounded by three Hannover players - slotted inside the post.
Schmid secured the win in the 73rd, after Hannover lost possession in midfield. The comedy of errors continued with Steve Cherundolo failing to clear and Zieler letting Schidt's crisp shot trickle into the net under him.