Brayden Schenn and Jordan Kyrou scored, and Nick Leddy had three assists for the Blues (23-20-2), who have won consecutive games after a three-game skid (0-2-1). Jordan Binnington made 32 saves.
"I think this was our biggest game of the year so far," Kyrou said. "It was a great effort by us in the third period to come back, but obviously, I think we can play a lot better in the first 40 [minutes], and that's everyone. But it was a great effort to come back. Huge, huge two points for sure."
Yegor Sharangovich had a goal and an assist, and MacKenzie Weegar and Noah Hanifin scored for the Flames (21-21-5), who have lost three straight after a season-long four-game winning streak. Jacob Markstrom made 22 saves.
"You want to stick around and be in the hunt and be in the mix," said Markstrom, who was playing his first game after missing three because of a lower-body injury. "Tonight was a tough one."
Schenn stole the puck from Weegar and scored on a short-handed breakaway at 17:13 of the second period to pull St. Louis within 3-2, and Kyrou tied it 3-3 at 6:56 of the third when he skated out of the corner and shot past Markstrom from the slot.
"It's focus and preparation," Weegar said. "We talked about that at the beginning of the year. We came out slow. We had a great second period. It was going our way. Third period, it's still going our way. It was back and forth. They tied it up, that's OK. We're 3-3. We can go to overtime and get a point and get two points, and just a tough bounce there. That was tough at the end."