But Montreal's P.K. Subban scored midway through the third to knot the game.
In overtime, Ron Hainsey got control of the puck on the right side and sent a slap-pass to Semin in the left circle. The Hurricanes winger stopped the puck, spun around and fired a shot past Carey Price for winner.
Skinner added an assist and Staal finished with a goal and two assists as Carolina snapped a five-game losing streak.
Cam Ward made 21 saves for the win.
Max Pacioretty had two goals and and Lars Eller also scored for the Canadiens.
Price turned aside 37-of-42 shots.
Boston schools pull out free condoms over wrapping complaints
Aaron Carter is still in love with Hilary Duff