Jordan Eberle had a goal and an assist, Cal Clutterbuck scored his first goal since Jan. 13, and Thomas Greiss made 22 saves for New York (9-6-2), which had lost three straight.
"Obviously it feels nice," Kuhnhackl said. "The last couple of games, we played pretty solid games, we just didn't get the result we wanted to. It was nice to get the win today."
WATCH: [All Canucks vs. Islanders highlights]
Brendan Leipsic and Jake Virtanen scored for Vancouver (10-8-2), which has lost three in a row and is 1-2-2 on a six-game road trip. Jacob Markstrom made 29 saves.
"It's been a grind a little bit, but it's not an excuse," Canucks coach Travis Green said. "In the NHL nowadays, you've got to be able to win on the road. We get home in a few days. We've got one more game and we're going to finish this trip off with a win."
Leipsic gave the Canucks a 1-0 lead at 2:48 of the first period when he converted Bo Horvat's cross-ice pass from the left circle.
Kuhnhackl tied it 1-1 at 5:11 when his backhand shot after falling on his back in the left circle managed to squeak past Markstrom at the left post.