Julian Draxler opened the scoring for Schalke in the 30th minute before Claudio Pizarro equalised in the 42nd minute from the spot.
Bundesliga's top scorer Klaas Jan Huntelaar was on target in the 65th and 74th minute to give the visitors a 3-1 lead, which Pizarro cut to 3-2 in the 82nd minute.
Schalke had already secured third place in the Bundesliga and a direct spot in the Champions League next season. But Huntelaar's 28th and 29th goals gave him the scoring crown ahead of Bayern Munich's Mario Gomez, who had 26 scores this season.
Bremen slumped to ninth in the league with 42 points.