- Julian Brandt (45'+2')
- Raphaël Guerreiro (77')
- Lee Buchanan (89')
- Niklas Schmidt (90'+3')
- Oliver Burke (90'+5')
Dortmund, who were lacklustre throughout, thought they had done enough to win the game after being 2-0 up until the 89th minute.
- Notebook: The inside stories from world football
- Don't have ESPN? Get instant access
Werder have now become the first Bundesliga team to score three goals in a game from the 89th minute onwards.
"We are unfortunately talking about a deserved defeat," Dortmund coach Edin Terzic told a news conference.
"Still, it's frustrating when you are 2-0 up until the 89th minute, even if you have not played well.
"It is difficult to explain it rationally. After they scored their first goal we started to shake.
"Even if our performance is not good we should be winning such matches."
Dortmund's Julian Brandt had fired a blinder past Werder keeper Jiri Pavlenka in first-half stoppage time to take an unexpected lead after a dire 45 minutes for the hosts where nothing seemed to work.
Werder, who had 10 shots on goal compared with Dortmund's two by the 75th minute, were the more adventurous side throughout, their passing game more fluid and creative and their attacks more dangerous.
But they were caught out again when Raphael Guerreiro tried his luck from 25 metres out and beat Pavlenka with a low shot in the 77th minute.
The visitors, however, refused to give up and scored what might have been a consolation goal through youth international Buchanan's superb strike into the top corner in the 89th.
But Schmidt then drew them level before Burke's stunning winner deep in extra time, which left Dortmund on six points from their first three games.
Wolves' keeper Coen Kasteels saved two consecutive spot kicks from Simon Terodde when a first-half stoppage-time penalty had to be retaken.
Bayer Leverkusen, competing in this season's Champions League group stage, slumped to their fourth consecutive defeat of the season across all competitions -- and their third straight in the Bundesliga -- when they went 3-0 down to Hoffenheim for their worst ever start to a league campaign.
- Florian Badstübner
|1. FC Union Berlin||5||2||0||3||0||6|
|1. FC Heidenheim 1846||5||1||1||3||-4||4|
|SV Darmstadt 98||5||0||1||4||-10||1|