Greaves stopped 17 of 18 shots in the third period to hold off a late push by the Blues.
Zach Werenski scored for the third straight game and an assist, and Charlie Coyle and Sean Monahan each had goals for the Blue Jackets (7-4-0), who have won six of seven.
Justin Faulk and Nick Bjugstad scored, and Joel Hofer made 32 saves for the Blues (3-7-2), who have lost seven straight (0-5-2).
Faulk put St. Louis ahead 1-0 at 3:37 of the first period. Oskar Sundqvist sent a cross-ice pass from the left boards to Faulk in the right circle, who beat Greaves with a wrist shot.
Coyle evened it 1-1 at 4:38 by jabbing a loose puck in the crease off the right skate of Faulk. Coyle had four assists vs. the Toronto Maple Leafs on Wednesday.
Werenski made it 2-1 at 11:55 of the second period with a shot from the right dot that went through the legs of Blues defenseman Philip Broberg.
Monahan scored on the power play at 5:07 of the third period to increase the lead to 3-1. He tapped in the rebound of a Werenski shot from the point that dropped in the crease after it hit the left post. The goal was Monahan’s 600th NHL point (264 goals, 336 assists).
Bjugstad cut the deficit to 3-2 at 9:48 on the rush. Columbus captain Boone Jenner broke up a pass by Pavel Buchnevich but his clearance went to Bjugstad in the slot.