Colton Parayko scored twice, Ivan Barbashev scored, and Jake Allen made 39 saves for St. Louis (12-14-4), which has won two in a row and is 3-1-1 in its past five games.
"Great finish there by Ryan O'Reilly," Blues coach Craig Berube said. "Well rewarded by a guy that played hard all night and had a tough job and did a great job. I thought that the penalty kill was excellent again."
J.T. Compher had a goal and an assist, Sven Andrighetto and Matt Calvert scored, and Grubauer made 24 saves for Colorado (17-9-6), which has lost three in a row (0-2-1).
Mikko Rantanen had an assist to extend his point streak to 13 games (six goals, 18 assists).
"We're on a power play. We've got our best players on the ice on a 4-on-3 power play and we give up a breakaway," Avalanche coach Jared Bednar said. "It should be us putting a dagger through them and getting two points."
Grubauer said he should have stopped O'Reilly.
"It was a breakaway. I was trying to make the save," Grubauer said. "That's all I saw and that was the goal. Can't happen but I've also got to make the save. We still got a point out of it and the next game's tomorrow. We've got to make sure we win that."
Parayko gave the Blues a 3-2 lead at 11:00 of the third period as a power play expired, but Compher scored a power-play goal on a rebound in the slot at 13:10 to tie it 3-3.
Parayko scored to make it 1-0 at 3:24 of the first period on a one-timer from the point, but Andrighetto tied it 1-1 at 5:42.
Calvert scored with a backhand on a wraparound at 9:48 to give the Avalanche a 2-1 lead.
Barbashev tied it 2-2 with 41 seconds remaining in the first period, converting a cross-crease pass from Jay Bouwmeester.