Sejad Salihovic gave Hoffenheim the lead in the 10th minute and the hosts lost their first player two minutes later when Mame Biram Diouf saw his second warning. Kai Herdling doubled the lead after 18 minutes.
Salif Sane halved the deficit for Hannover in the 56th minute but Firmino tallied in the 62nd and 64th minutes to decide the game. Marcelo was sent off for Hannover in the 64th minute.
Hoffenheim, who lost last weekend on a goal that did not actually go in, snapped a four-match winless streak to improve to 13 points.
Hannover saw their winless streak extended to four matches and remain on 13 points.
The hosts had the first chance in the first minute as Leon Andreasen crossed from the right side to Szabolcs Hustzi, whose blast went just over the crossbar.
Hoffenheim were awarded a penalty in the 10th minute when Christian Schulz took down Anthony Modeste. Salihovic hammered his spot kick into the upper middle for a 1-0 lead.
Diouf was warned for complaining after the goal went in. The Senegalese was then booked again by referee Tobias Stieler two minutes later for diving in the box.
The guests doubled the advantage in the 18th minute with Andreas Beck crossing from the right side and Herdling heading to the far left post.
Hannover got back into the game after the break with Sane heading in Leonardo Bittencourt's free kick from the right side off the far left post and in to make it 2-1.
Hoffenheim re-established a two-goal advantage 3-1 in the 62nd minute as Eugen Polanski played a fine pass to Firmino, who shot a flat ball past keeper Ron-Robert Zieler to the left corner.
The cushion was 4-1 two minutes later as the Brazilian struck again with Sven Schipplock feeding Firmino, who fended off Marcelo and beat Zieler again.
Marcelo felt he was fouled on the play by Firmino and vehemently pled his case to Stieler, who promptly red-carded him in the 64th minute.
Hoffenheim took their foot off the gas after that and Hannover lacked the firepower - and manpower - to create any good chances.