Nikita Kucherov, Cedric Paquette and Adam Erne each had a goal and an assist, Steven Stamkos and Ondrej Palat scored, and Andrei Vasilevskiy made 36 saves for the Lightning (26-7-2), who are 9-0-1 in their past 10 games.
Tampa Bay, which opened a four-game road trip with a 5-4 overtime loss to the Winnipeg Jets on Sunday, got two goals and three assists from its fourth line of Erne, Paquette and Danick Martel.
"When you don't have the first two lines scoring, the third and fourth are there to score, and that's been huge for us this year," Paquette said. "It feels like we are a complete team."
[WATCH: All Lightning vs. Canucks highlights]
Martel, who was walking to the rink when he learned he was in the lineup after forward Ryan Callahan sustained a minor upper-body injury during warmups, had an assist on Paquette's goal for his first NHL point in his sixth game, and Erne scored the game-winning goal.
"They played great all year," said Stamkos, who scored on a 2-on-1 with 2:38 remaining to make it 4-2. "Martel didn't even take warmup and amazing for him to jump in and play a great game, got his first NHL point, and stirred it up a little bit. And [Paquette] has been great all year. Those guys were great and a big reason we won."
Tyler Motte and Christopher Tanev scored, and Anders Nilsson made 32 saves for the Canucks (16-17-4), who lost in regulation for the first time in seven games (5-1-1).
"It was a [heck] of a hockey game. We were playing a team that's first overall in the League, and I thought we stood in there, toe to toe," coach Travis Green said. "I like the way our team is coming together. They're sticking together, they're battling hard."
Kucherov, playing his 400th NHL game, scored at 8:40 of the first period to give Tampa Bay a 1-0 lead and extend his point streak to six games. Shortly after killing a 53-second 5-on-3 power play for Vancouver, Brayden Point won an offensive-zone face-off back to Kucherov for a quick, glove-side wrist shot through a screen.
Kucherov has eight points (three goals, five assists) during his streak.
Video: TBL@VAN: Kucherov strikes off the face-off
Motte tied it 1-1 by redirecting a backdoor pass from defenseman Troy Stecher at 9:17, but Paquette put the Lightning ahead 2-1 at 11:07 with a one-timer after a spinning cross-ice pass off the rush from Martel.
"I think I closed my eyes on that one. [Paquette] screamed, and I got scared," said Martel, who had not played since Nov. 10. "I just try to grab the D on my shoulder and spin and find an open guy, and [Paquette] was open and he talked to me, so I saw him and great execution."
Erne extended Tampa Bay's lead to 3-1 at 8:37 of the second period by redirecting Paquette's long shot between Nilsson's legs.
"Paquette, Erne and Martel, huge," coach Jon Cooper said. "Different guys stepped up, and then a huge goal by [Stamkos], that fourth one, and it kind of took the life out of them."
Video: TBL@VAN: Stamkos pads lead with loaded wrister
Tanev made it 3-2 at 5:46 of the third period with a point shot through traffic that went under Vasilevskiy's arm and trickled over the goal line.
After Stamkos restored the two-goal lead, Palat scored into an empty net with 1:43 left for the 5-2 final score.
They said it
"It was great to see him get his first point. He's sat out a lot of games, and for him to come in and play the way he did, good on him." -- Tampa Bay Lightning coach Jon Cooper on rookie forward Danick Martel
"My warmup was dressing. Not thinking. I was just expecting absolutely nothing. Pretty much everyone would have thought I would have a bad game, but I wanted to make a difference. I don't have a lot of opportunities, and when I have some, I need to get ready." -- Martel on learning he was in the lineup after forward Ryan Callahan was injured in warmups
"I told our group, you've got to love playing in these games. If you don't like playing when it gets intense, you're probably not going to be much of a winning hockey player in the NHL." -- Canucks coach Travis Green
Need to know
Kucherov has 32 points (eight goals, 24 assists) in the past 17 games. … Point has 25 points (12 goals, 13 assists) in the past 17 games. … Stamkos has 10 points (seven goals, three assists) in the past five games. … Lightning defenseman Dan Girardi played his 900th NHL game. … Stecher left the game with 5:34 left in the second period after a hit by Martel. … Elias Pettersson's point streak ended at seven games, one shy of Pavel Bure's Canucks rookie record, set in 1991-92.
Lightning: At the Calgary Flames on Thursday (9 p.m. ET; SNW, SUN, NHL.TV)
Canucks: Host the St. Louis Blues on Thursday (10 p.m. ET; ESPN+, SNP, FS-MW, NHL.TV)
Video: Lightning ride balanced offense, Vasilevskiy to win