The Norwegian teenager, who was brought in on the hour, scored with the last action of the game to lift second-placed Dortmund to 66 points from 31 games, with leaders Bayern Munich on 70 before they host Borussia Monchengladbach later.
Dortmund never hit top form and survived several scares before Raphael Guerreiro volleyed home just past the hour. The effort, however, was cancelled out by a VAR review for handball after the ball was deflected onto Guerreiro's shoulder.
Fortuna, in the relegation playoff spot, almost took the lead after twice hitting the post through substitute Steven Skrzybski -- first in the 82nd minute with a low shot and eight minutes later again after he broke clear.
But Haaland, back from a knee injury, bagged his 11th goal in 12 league games and made sure of a last-gasp win when he rose high to connect with Manuel Akanji's cross.
"Good teams win on bad days," Haaland said after the match.
The win also maintained Dortmund's four-point gap over third-placed RB Leipzig, who won 2-0 at Hoffenheim on Friday.