Staal scored with 7:02 remaining in the game on a rebound after Erik Cole's shot hit the post.
Ray Whitney had two goals for Carolina, including one on a breakaway to make it 3-1 with 1:24 remaining.
Ryan Craig and Martin St. Louis scored for Tampa Bay, which has lost four in a row and eight of nine.
St. Louis' power-play goal in the final minute pulled Tampa Bay within 3-2.
Ward turned aside Vincent Lecavalier's low slot backhander during the second. He also made a diving glove save on Lecavalier with eight minutes left in the third.
Lecavalier had his eight-game point streak end. He had eight goals and 15 points during the stretch.
Craig put the Lightning ahead 1-0 from in close at 7:49 of the second. Whitney's power-play goal tied it 1-all with 6:55 left in the period.
Marc Denis got some help 90 seconds into the third. After Justin Williams hit the post, Lightning defenceman Filip Kuba cleared the puck out of the crease before Whitney could get a rebound chance. The goalie stopped Cole during a 2-on-1 three minutes into the game and made a save on Whitney's in-close chance late in the second.
Denis finished with 24 saves.
Notes: Tampa Bay LW Ruslan Fedotenko was out of the lineup due to a coaches' decision. He has two goals over his last 17 games. ... Hurricanes captain Rod Brind'Amour (lower body injury) missed his fourth straight game. ... Tampa Bay C Brad Richards' four-game goal-scoring streak ended.