In the first match of Bundesliga's 50th campaign, Dortmund took just 11 minutes to take the lead through Marko Reus.
The German international latched onto a though pass from Jakub Blaszczykowski before shooting low into the Bremen net for his first Dortmund goal.
The visitors responded well though and Marko Arnautovic went close to equalising when his powerful right-footed effort struck the crossbar.
Both Reus and Mats Hummels had chances to extend Dortmund's advantage but sent their efforts off target from good positions and it looked as if those misses would prove costly when Theodor Gebre Selassie levelled the scores with 15 minutes remaining.
After Dortmund stopped play claiming a throw-in on the left side, Arnautovic capitalised and crossed for the Czech defender to head home.
However, as they did so often last season, Dortmund found a late winner courtesy of substitute Mario Gotze, who applied the finish to Robert Lewandowski's pass just minutes after his introduction off the bench.