The teams will play again here Saturday.
Brandon Saad gave the Avalanche a 1-0 lead at 3:24 of the first period when he put in the rebound of Nazem Kadri's shot on the power play.
Hoffman tied it 1-1 at 3:50 on the Blues' first shot on goal, shooting inside the right post from in tight after Brayden Schenn passed from behind the net.
"It's a bad goal by me," Johansson said. "It's a mistake, but everyone makes mistakes and we support each other. We know mistakes happen and we managed to get past it."
Johansson made a left-pad save against Hoffman on a breakaway at 6:26 to keep the game tied.
"I'm really happy for Jonas," Colorado coach Jared Bednar said. "He's been battling for quite some time, he's put some hard work with us just in the past couple weeks sort of trying to refine his game and get sharp again. They score on their first shot, which mentally is not easy, but he came up huge even in the first period. After he gave up that goal on his first shot, he stops a breakaway where we have a big breakdown. Our team will gain confidence in him as he continues to play."
MacKinnon put the Avalanche in front 2-1 at 14:43 when he scored from in front off a Landeskog pass on the power play.
MacKinnon increased the lead to 3-1 at 13:11 of the second period, skating from inside the Colorado blue line and shooting five-hole from low in the right face-off circle.
"I thought we had a little bit of a slow start," MacKinnon said. "We held the lead throughout the game, which is important. Obviously, it's a really good team, they're desperate. But it's great to see [Johansson] get his first win with the Avs, and he looked great tonight."