Staal scored the go-ahead goal on a redirection at the front of the net.
Andrei Svechnikov had pulled Carolina within 4-3 on the power play with 1:59 left, scoring at the right post on a rebound off the end boards, before Shayne Gostisbehere tied it 4-4 with 1:27 remaining on a one-timer from inside the blue line.
Svechnikov and Gostisbehere each had two goals and an assist, and Brandon Bussi made 21 saves for the Hurricanes (33-15-5), who extended their point streak to six games (5-0-1) and are 9-1-2 in their past 12.
Kailer Yamamoto had two goals and an assist, Jack McBain had two assists, and Karel Vejmelka made 28 saves for the Mammoth (28-22-4), who had won six of seven.
Svechnikov gave Carolina a 1-0 lead at 3:04 of the first period. Vejmelka stopped Jalen Chatfield’s backhand shot after Utah turned the puck over behind the net, but Svechnikov scored on the rebound from low in the right circle.
The Mammoth tied it 1-1 at 4:10 of the second period. McBain moved the puck ahead to Yamamoto after Gostisbehere lost it in the neutral zone, and Yamamoto’s snap shot from the high slot went in off the left post.
Yamamoto scored again to make it 2-1 at 8:24. Bussi stopped Nick DeSimone’s shot from low in the left circle, but Yamamoto tapped the rebound into an open net at the top of the crease.
Gostisbehere tied it 2-2 with a power-play goal at 17:36, scoring over Vejmelka's glove on a one-timer off a pass from Svechnikov.
JJ Peterka responded to put the Mammoth ahead 3-2 just 19 seconds later after a Carolina turnover in the neutral zone. He took a pass from Barrett Hayton and scored on a one-timer from above the left circle at 17:55.
Utah extended the lead to 4-2 at 7:11 of the third. After Gostisbehere turned the puck over near the end boards, McBain set up Michael Carcone for the finish in front.