The Blues moved into a 12th-place tie with Columbus in the Western Conference but they are eight points out of a playoff position. Montreal remained stuck on 81 points in sixth place in the East, seven points in front of the New York Rangers and Buffalo.
Halak was playing against the team that traded him away in June after he played a key part in Montreal's trip to the Eastern Conference finals last season.
He allowed a tip-in goal by Jeff Halpern with 7:30 to go in the opening period, but the Blues dominated the rest of the way.
David Backes tied it with 1:01 to go in the first and Andy McDonald put St. Louis in front 1:06 into the second. It remained a 2-1 game until Matt D'Agostini and T.J. Oshie scored over the final 1:29 of the third.
The Canadiens played for the first time since forward Max Pacioretty was sent to the hospital following a violent collision with Boston's Zdeno Chara. Pacioretty suffered a concussion and a vertebra fracture in his neck.
Carey Price gave up three goals on 26 shots for Montreal, which had a five-game winning streak snapped.