Daniel Sedin scored a goal and an assist for the Canucks, who ended a two-game skid, and Dale Weise scored what turned out to be the game-winning goal on a backhander at 11:15 of the second period.
It was then up to Cory Schneider, who preserved the victory with 33 saves despite allowing two St. Louis goals in the third period.
A timely boarding penalty on Vladimir Sobotka at 16:54 of the third meant the Blues played short handed down the stretch while needing a goal to tie the contest.
Jaden Schwartz and Patrik Berglund scored for St. Louis, and Jake Allen allowed three goals on 19 shots.
Millions of Getty images now available for free via embed tool
Aaron Carter is still in love with Hilary Duff