Chelsea-bound US international Christian Pulisic found the net in his final home game for Dortmund, helping them to battle back to within two points of league leaders Bayern ahead of the final round of games next weekend.
Bayern can now secure the title with a win at home to Eintracht Frankfurt next Saturday, while Dortmund must win at Borussia Moenchengladbach.
Dortmund, who looked dead and buried after slipping four points behind last week, had fortune in their favour as they stumbled to victory over Duesseldorf.
Pulisic, who will join Chelsea next season, bid an emotional farewell to the Dortmund fans before the game and then opened the scoring on 41 minutes.
A howler from stand-in goalkeeper Marwin Hitz allowed Oliver Fink to equalise, but Thomas Delaney restored the lead for Dortmund.
Hitz then gave away a penalty with a foul on Dodi Lukebakio, but the Belgian dragged the ball wide from 12 yards.
Mario Goetze appeared to seal the win for Dortmund with a goal on 90 minutes, but Dawid Kownacki pulled one back for Duesseldorf minutes later to make it a nerve-jangling finish for the hosts.
Duesseldorf then squandered a golden chance to make it 3-3 right at the death, but Dortmund held on to seal a crucial, if not beautiful, win that takes the title race to the last game of the season.