The hosts were ahead inside three minutes courtesy of Davie Selke's curled strike before the 19-year old turned provider by setting up Fin Bartels to stroke home just after the hour.
Mats Hummels pulled one back for Dortmund with a bullet header, but Bremen held on to claim victory and end a run of six straight defeats to Jurgen Klopp's side.
The result moves Bremen above Dortmund, who remain in the relegation zone following a 10th league loss of the season as the pressure continues to increase on Klopp and his players.
Both sides came into this game in desperate need of three points to get their respective seasons back on track before the mid-season break, but it was the hosts who made a dream start after three minutes.
A superb ball from Santiago Garcia found Selke behind the Dortmund defence, allowing the German to pick his spot and apply a smart curled finish past Mitchell Langerak.
Assani Lukimya, one of two changes to Viktor Skrypnyk's side, nearly increased the lead four minutes later, but his close-range effort was deflected wide.
Dortmund, who made three alterations from the 2-2 draw to Wolfsburg, dominated possession in the middle of the park for much of the first half, but remained largely predictable in the final third, with lone frontman Ciro Immobile left with little in terms of service.
Bremen continued to look dangerous and were nearly celebrating again after 25 minutes when a sweeping counter-attacking move saw Melvyn Lorenzen break away into the area, only to skew his shot wide.
Marcel Schmelzer fizzed a half-volley over six minutes later as Dortmund looked for way back into the game, while a mistake at the other end from Hummels just before the break meant Langerak had to be alert to rush out and deny Selke from doubling his tally.
The visitors introduced Shinji Kagawa at half-time to help try and find a breakthrough that nearly came six minutes after the restart when Lukasz Piszczek's back-post cross took a heavy deflection off Garcia before looping just wide.
Kagawa then headed wide four minutes later, but Dortmund found themselves further behind after 62 minutes.
Another brilliant counter attack saw Selke drive down the right wing before his low cross found Bartels, who made no mistake from close range.
Hummels gave Dortmund a lifeline when he rose highest to meet Ilkay Gundogan's corner and power a header into the net with 21 minutes remaining.
The visitors continued to press for an equaliser, with Kagawa firing wide 11 minutes from time, before Gundogan produced a tame header straight at Raphael Wolf, while Bartels was denied by the post late on.
Bremen held on to clinch three vital points in their battle to beat the drop and keep Dortmund deep in trouble.