The win allowed the Hurricanes to tie Atlanta for eighth place in the Eastern Conference with 58 points.
Hurricanes goalie Cam Ward stopped 34 shots and Atlanta's Ondrej Pavelec made 33 saves.
Eric Staal, Brandon Sutter and Jiri Tlusty also scored for Carolina.
Niclas Bergfors, Brent Sopel and Zach Bogosian tallied for Atlanta.
Bogosian tied the game at 3 with 1:24 left in the third with Pavelec pulled for an extra skater.
Tlusty put Carolina ahead 3-2 on a shot in transition from the right circle at 12:42 of the third period, with Patrick Dwyer getting the assist. That goal was 28 seconds after the Thrashers tied it 2-2 on Sopel's unassisted shot from the right point.
Sutter put the Hurricanes ahead 2-1 on a rush at 8:37 of the third period, beating Pavelec over the stick side shoulder from the high slot. Joni Pitkanen had an assist for his 100th point with the franchise.
Atlanta led 1-0 after the first period. The Thrashers took the lead in a delayed-penalty situation at 12:33 on Bergfors' tip-in on the open left side of the crease, with Bryan Little getting the assist.
The Hurricanes were dominant in the second period, outshooting Atlanta 16-9 and tying the score.
Staal made it 1-1 on a power play at 8:16, following his own shot to beat Pavelec from the right side of the crease for his 26th goal of the season.
Carolina was unable to convert a two-man advantage which spanned the last 1:40 of the second period and the first 20 seconds of the third.
But Atlanta also came up empty in a 5-on-3 advantage lasting 1:18 early in the third.
Notes: Ward started his 12th straight game. ... Hurricanes forward Jussi Jokinen was a scratch for the second straight game with a lower-body injury and is listed day to day. ... Pavelec was assessed a penalty for playing the puck in the restricted zone in the first period.