The Avalanche, who were 0-1-3 in their previous four games, scored on all three of their power plays and killed all three of the Blue Jackets' man advantages.
"Our penalty-killing did a good job and our power play was sharp," Avalanche coach Patrick Roy said. "Special teams were a difference maker on our side."
The Avalanche overcame 1-0 and 2-1 deficits and finally secured the win when Nathan MacKinnon redirected Andre Benoit's pass into the net with 1:03 remaining in regulation for Colorado's third extra-man goal.
The Avalanche also needed a strong game from goalie Semyon Varlamov on a night when the Blue Jackets outshot them 38-23.
"We had some frustrating games and we finally got those two big points," MacKinnon said. "We're still in a good position for a playoff run. Good teams find a way to win when they're not at their best. We know we're not going to be at our best every night and it was important for us to kind of squeeze that one out."
McGinn tied the game at 12:04 with his second goal in the past 11 games. Duchene took a shot from between the circles and McGinn backhanded the rebound past goalie Curtis McElhinney.
"It was huge because I've been struggling for a bit," McGinn said. "I thought our line did a good job. We had some quality chances and it was good that we capitalized on our opportunities."
The Avalanche went on a power play shortly after and O'Reilly converted at 14:42 by moving to the front of the net and banking the puck off McElhinney and into the net after taking a pass from Duchene.
"I think we just bore down," Duchene said. "We didn't like our game 5-on-5 at all. I think they definitely outworked us. We knew they were a hard-working team, a blue-collar team. We weren't ready for their work ethic and they took it to us a bit 5-on-5 so when we got those chances on the power play, we wanted to bear down on those chances and we did. It's nice to get some confidence, get the boys touching the puck and moving it around."
The loss was the second in a row for the Blue Jackets following a three-game winning streak -- not the way they wanted to begin a four-game road trip.
"For the most part we had most guys playing hard for 60 minutes," Columbus coach Todd Richards said. "If you can continue to do that it's going to happen for you. You're disappointed and frustrated, but you have to press forward. That's two games in a row we've given up three [power-play] goals. You're not going to win any games in this League if you're giving up three goals on the power play.
"You can't avoid penalties, but our power play had opportunities to score goals and we didn't do enough there."
The Blue Jackets have failed to score on 16 consecutive power plays and are 1-for-24 in their past seven games.
Gabriel Landeskog finished a tic-tac-toe passing play with Paul Stastny and MacKinnon for a power-play goal at 8:10 of the third period to give the Avalanche a 4-2 lead, but the Blue Jackets closed within a goal 37 seconds later. Varlamov made a save against RJ Umberger and thought he had the puck covered, but Nick Foligno dug it out, circled behind the net and poked it inside the opposite post at 8:47.
"[Columbus] is a good team," Roy said. "They're big and they were skating well and they moved the puck well. I thought it was a great challenge for our team and I thought we responded well. I would like to see us getting less shots [against] and us getting more shots. They were shooting from everywhere and this is something we could be doing a little bit better."
The Blue Jackets controlled play in the Avalanche end for a long stretch and went ahead 2-1 at 8:34 of the second period on a goal from Boone Jenner, who put in a rebound off a shot from Jack Johnson.
Columbus' Ryan Johansen scored his team-leading 16th goal 4:13 into the game after Foligno skated untouched from the right corner to the front of the net for a shot. Varlamov made the save, but Johansen followed and knocked in the rebound.
The Avalanche tied the game on a goal by defenseman Jan Hejda after a Blue Jackets turnover. Hejda took a shot from the left point with McGinn in front and the puck slid by a screened McElhinney at 6:3