Dortmund, who had already lost one game this season, looked set to drop further points before youngster Haaland and veteran Reus came off the bench in the second half to breathe new life into a blunt performance.
Haaland, 20, surged forward on the break to set up Reus with a tap-in and snatch Dortmund's first away victory over Hoffenheim in eight years. Haaland was initially rested after he played three times for Norway in the previous two weeks, prompting criticism of the busy international schedule.
Hoffenheim were also without three first-team regulars, as Croatia's Andrej Kramaric, Ghana's Kasim Adams, and Czech defender Pavel Kaderabek were all sent into quarantine after their return from international duty. The club confirmed on late on Friday that two of three had tested positive for the coronavirus.
"We need to have a conversation about the international schedule. Normally, we are happy to let players go, but these are unusual times," Hoffenheim sporting director Alexander Rosen told Sky.
Mijat Gacinovic missed a gilt-edged opportunity for Hoffenheim early on, and both Giovanni Reyna and Thomas Meunier came close for Dortmund.
Yet it was Reus who landed the decisive blow, slotting Haaland's square pass into the open net to score his first goal since February.
Dortmund now sit one point behind league leaders RB Leipzig, who held onto top spot with a 2-0 win against surprise high-fliers Augsburg.
Angelino headed Leipzig in front on the stroke of half-time to score his second goal in two games before Yussuf Poulsen doubled the lead with a sumptuous volley on 66 minutes.
Elsewhere, Lucas Alario's first-half header sealed a 1-0 win for Bayer Leverkusen and extended second-from-bottom Mainz's miserable run to four defeats in four games.
Promoted side Stuttgart continued their good start to the season with a 2-0 win at Hertha Berlin, while Freiburg and Werder Bremen shared the points in an eventful 1-1 draw in the south-west.
Marc Oliver Kempf headed in a Daniel Didavi free-kick to give Stuttgart an early lead, and Gonzalo Castro fired in the second with a fizzing long-range effort in the second half.
Freiburg took the lead early on through Philipp Lienhart and had a second goal ruled out for offside before Bremen's Niclas Fuellkrug levelled the scores from the penalty spot.