Jurgen Klopp's side played most of the game with 10 men, following Julian Schieber's dismissal, but were still able to prevail thanks to their former Gladbach attacker
Marco Reus scored all three goals to settle an eventful contest which saw two players, Julian Schieber and Takashi Inui, dismissed by referee Felix Brych.
The Schwarzgelben started the game at breakneck pace, determined to notch an early goal. Within seconds, Reus had teed up Jakub Blaszczykowski, who skewed an effort high and wide, before the former Borussia Monchengladbach man forced a decent save from Kevin Trapp, after being played in by Sven Bender.
Reus should really have finished his chance, but it was not long before he made amends. In the ninth minute, Mario Gotze flicked Ilkay Gundogan's ball into the 23-year-old's path, and he finished superbly to put his side into a deserved lead.
Seconds later, things got a whole lot worse for the visitors. Hummels stepped out of defence and played a lovely through-ball to Reus, who tucked the ball past Trapp to make it two.
Frankfurt had not really got going in the match, but fashioned their first real chance on the 20-minute mark, with Sebastian Jung crossing to Srdjan Lakic, whose header missed the target.
The game had settled down into a rhythm, but the visitors were soon handed a path back into the match. Schieber, handed a rare start thanks to Robert Lewandowski's suspension, picked up two harsh booking within minutes of one another, thus becoming the second BVB striker to get sent off in as many weeks.
That did little to deter Dortmund, though. A free kick soon created mayhem in the box, but Frankfurt managed to scramble the ball away from Mats Hummels before Kuba skied another effort after being set up by Gotze.
The visitors should have gained a foothold in the contest just before the break, though. First, Sebastian Rode sent the ball wide after being sent through by Lakic, then Takashi Inui sent a shot well wide from a promising position.
Dortmund began the second half on the front foot, with Gotze darting inside from the left wing and firing wide when he perhaps should have squared threaded a ball through to Reus.
Their set pieces were causing Frankfurt all sorts of problems, though, and one almost led to a goal when Neven Subotic blasted goalwards after the visitors failed to clear their lines, only for the ball to strike Anderson Bamba and hit the bar. Moments later, Gotze forced a decent save from Trapp from a narrow angle.
Lakic missed another chance to give his side a route back into the match, volleying wide after good work from Olivier Occean, and it was to prove costly. Gundogan fed Gotze brilliantly and the Germany international held the ball up well before laying it off to Reus, who completed his hat-trick from short range.
Things went from bad to worse for the visitors soon after when Inui received his second booking, and, with the contest long over, BVB coasted to victory.
Jung rattled the bar with an effort in the dying moments, but even if it had gone in, it would have mattered little. Dortmund had done more than enough to move back above Bayer Leverkusen, who had gone second earlier in the day.