The Blues' four-game winning streak was snapped.
Zetterberg scored the first two goals and set up Jonathan Ericsson's tying goal early in the third period. Detroit's captain missed practice on Thursday because he wasn't feeling well, but he was at the top of his game Friday.
St. Louis goalie Jaroslav Halak left the game shortly after Zetterberg's second goal midway through the first period and was replaced by Brian Elliott. It wasn't clear whether Halak was hurt or was pulled by coach Ken Hitchcock.
Detroit's Jimmy Howard made 23 saves for his 114th victory, tying Dominik Hasek for seventh place on the team's career list.
The Red Wings scored only one goal on six power plays over the first two periods, but they took advantage when David Backes' major penalty gave them an extra skater for 5 minutes midway through the third period.
Backes was ejected for illegal contact to the head when he used his shoulder to hit Detroit defenseman Kent Huskins high.
Detroit had to kill another penalty to win when Daniel Cleary was called for interference with 2:11 left. With a second remaining on the power play, Zetterberg raced Blues center T.J. Oshie to the puck that was going toward the St. Louis net, took a hit from Oshie,
The rebuilding Red Wings showed they could skate and score with the talented Blues after losing the opener 6-0 in St. Louis.
Zetterberg scored at 6:12 and 8:07 of the first period to put Detroit ahead 2-0. The Blues tied it 5 minutes later on goals from Kevin Shattenkirk and Matt D'Agostini. Patrik Berglund put the Blues ahead for the first time early in the second period, but they couldn't hold onto the lead.
NOTES: Detroit D Ian White, out since Jan. 25 because of a leg laceration, hopes to play Tuesday at home against Calgary. ... St. Louis rookie Vladimir Tarasenko, a 21-year-old forward, extended his point streak to five games. ... Zetterberg, who has a six-game point streak, had two goals and five assists in his previous five games. ... Blues F David Perron played in his 300th NHL game. ... Damien Brunner assisted on Zetterberg's first goal, giving the rookie a five-game point streak.