Andrew Mangiapane, Johnny Gaudreau and Oliver Kylington scored in a 3:37 span for the Flames (22-13-6), who won for the sixth time since Jan. 1 (6-6-0).
"It was a great comeback victory," Mangiapane said. "Obviously, we don't want to be down in games, but that's our first time getting a comeback victory here. I think that maybe we [have to] do a better job playing a full 60, and just sharpen up the little things."
Jacob Markstrom allowed three goals on 23 shots before being replaced to start the third period by Dan Vladar, who made five saves. It was the first time a Flames goalie had been pulled this season.
"Sometimes you've got to give the guys a little bit of a message and it was a good move by [coach Darryl Sutter]," Calgary associate Kirk Muller said. "[It] had nothing to do with [Markstrom], we play back to back (Wednesday against the Arizona Coyotes). It was just like, 'Hey, you know what, we've got a new guy coming in, you better play hard for him.' So, it was a good call."
Joel Hanley scored his first regular-season goal in his 100th NHL game, and Jake Oettinger made 36 saves for the Stars (23-18-2), who have lost twice in their past seven games (5-2-0).
"I hate beating ourselves," Dallas coach Rick Bowness said. "If a team comes in here and we play well and they beat us, we live with that. But when we beat ourselves like we did tonight, that's very frustrating."