Tim Schaller scored two goals, and Jacob Markstrom made 24 saves for the Canucks (6-3-1), who lost for the second time in eight games.
"That's not good enough," captain Bo Horvat said. "Going in with a four-goal lead, 21 minutes left, we've got to be able to hold those. We've got to be a lot better than that in the third. … At times, I think guys -- including myself -- were trying to make plays out of nothing and not getting the pucks in deep and simplifying our game. And I think that's what turned on us."
Eller set up Kuznetsov's goal late in the second and scored shorthanded at 1:57 of the third to make it 5-3.
"A little more life, a little more hope in the locker room at the end and built that up going into the third period," Eller said of Kuznetsov's second goal. "Get one late, get one early, and now it's a game."
Kempny scored on point shots through traffic that made it 5-4 at 4:57 and tied it 5-5 at 7:41.
"It didn't go as we expected, but I love that we didn't give up," he said. "Huge comeback win for us."
Kuznetsov scored alone in tight at 3:18 of the first period to put the Capitals ahead 1-0, but Brock Boeser tied it 1-1 on the power play off a pass from Quinn Hughes at 5:33.
Schaller scored on a shorthanded rush at 7:29 to put the Canucks ahead 2-1.
Elias Pettersson made it 3-1 with a wrist shot from inside the right face-off circle at 5:59 of the second, and Schaller batted a loose puck out of the air to make it 4-1 at 13:39.
Schaller has three goals, matching his total in 47 games last season.
"I still think I have a lot more to give," he said. "But it's nice to see hard work paying off, and I'm going to keep working hard and hopefully good things keep happening."
Jake Virtanen put the Canucks ahead 5-1 with a quick shot from the slot at 14:54.
Carlson leads the NHL with 21 points (five goals, 16 assists) in 13 games. With one game left this month, he is four points from tying the NHL record for most points by a defenseman in October, set by Al MacInnis with the Calgary Flames in 1990.