Dortmund's Mario Gotze opened the scoring for the visitors when he superbly drilled in through the legs of defender Andreas Beck and past keeper Koen Casteels in the 26th minute.
Hoffenheim's Sven Schipplock, however, levelled nine minutes later, stabbing the ball in from close range.
Dortmund, who had lost ground in the title race following two draws and a defeat in their last three league matches, renewed their lead early in the second half with Kevin Grosskreutz rounding off a quick move started by Goetze.
The goal took any will to fight out of the hosts and Poland striker Robert Lewandowski rounded Casteels to score his 10th league goal in the 66th minute.
"It was important to go into the break with the three points," Dortmund defender Mats Hummels told reporters.
"We have wasted eight or 10 points so far this season and that is frustrating. We have to improve in the second half of the season to reach our goals," said the Germany international.
Dortmund, who host Hannover 96 in the German Cup round of 16 on Wednesday, move up to third on 30 points, 12 behind leaders Bayern Munich and three behind second-placed Bayer Leverkusen, who beat Hamburg 3-0 on Saturday.
Hoffenheim's sixth straight league defeat left them in the relegation play-off spot, seven points behind 15th placed VfL Wolfsburg.
"My players gave it all they had and I cannot blame anyone," said Hoffenheim interim coach Frank Kramer. "We will now discuss everything else calmly during the winter break."
Leaders Bayern drew 1-1 against Borussia Monchengladbach on Friday to go into the break with a nine-point cushion over Leverkusen.
Get the best features, fun and footballing frolics straight to your inbox every week.
Thank you for signing up to Four Four Two. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.