After an Ottawa turnover in the neutral zone, Staal took a pass from Nikolaj Ehlers, skated over the blue line and scored on a snap shot under the crossbar.
Seth Jarvis scored two goals. Sebastian Aho had a goal and two assists, and Brandon Bussi made 22 saves for the Hurricanes (35-15-6), who extended their point streak to nine games (7-0-2).
Jake Sanderson had a goal and an assist for the Senators (27-22-7), whose four-game winning streak ended. James Reimer made 14 saves.
Ottawa took a 1-0 lead at 2:46. Stephen Halliday screened Bussi and scored on a net-front tip off Jordan Spence's one-timer from inside the blue line.
Aho tied it 1-1 at 17:49. Reimer stopped Aho’s shot in close, but the rebound deflected off the left skate of Sanderson in the crease and into the net.
Jarvis gave Carolina a 2-1 lead with a power-play goal at 12:39 of the second period, scoring on a snap shot from the right circle off a pass from Andrei Svechnikov.
Jarvis extended the lead to 3-1 at 15:41 when he took a pass from Aho in the neutral zone and drove the net on his backhand before chipping the puck over Reimer’s blocker on the forehand for 25th of the season.
The Senators scored on the power to cut the lead to 3-2 at 16:21. Tim Stutzle scored five-hole in the right circle on a one-timer off a pass from Sanderson.
Ottawa scored on the power play to tie the game 3-3 at 4:57 of the third period when Sanderson beat Bussi with a one-timer from above the circles.