Zack Kassian and Ryan Kesler also scored for Vancouver, which played at Rogers Arena for the first time since Oct. 12 after a seven-game trip. Henrik Sedin added an assist to extend his point streak to nine games.
Roberto Luongo made 17 saves as the Canucks won their fourth straight.
Jason Chimera, with a goal and an assist, and Mikhail Grabovski scored for Washington, which got 38 saves from Michal Neuvirth.
After the teams traded goals early in the third period, Daniel Sedin and Henrik Sedin played keepaway in the Washington zone to give Vancouver the lead for good. Daniel Sedin finished the sequence off by faking a pass at the top of the slot and blasting a shot past Neuvirth at 5:01 to make it 3-2.
The final period started well for Washington, with Grabovski beating Luongo on the glove side at 1:52 to give the Capitals their first lead at 2-1.
Canucks coach John Tortorella has been leaning heavily on his top line of the Sedins and Kesler, and they responded for Vancouver shortly after with the latter slapping a puck past Neuvirth just 61 seconds later.
After Daniel Sedin gave Vancouver the 3-2 lead, Neuvirth stopped Canucks forward Mike Santorelli on a power play to keep Washington within striking distance.
But the Capitals didn't threaten late in a game that saw them get outshot 41-19.
Tied 1-1 after the first period, Vancouver outshot Washington 16-3 in the second but couldn't find a way past Neuvirth. Canucks defenseman Jason Garrison walked into a one-timer on a Vancouver power play early in the period that Neuvirth was equal to.
Capitals sniper Alex Ovechkin then hit the post behind Luongo off the rush on a Washington power play.
Kesler had a chance late in the period in front of Neuvirth, but fired high over the goal from the left faceoff circle.
Coming off the season-long trip that saw Vancouver finish with a 5-1-1 record, the Canucks opened the scoring at 11:31 of the first period on Kassian's second goal of the season.
Washington tied the score just over 3 minutes later when Mike Green's shot from the point found Chimera's stick at the edge of the crease, with the puck barely trickling over the line at 14:36. Chimera, who has three goals in the last three games, started the sequence with a big hit in the Vancouver zone.
Ovechkin was awarded a penalty shot 89 seconds into the game when he was pulled down on a partial breakaway by defenseman Alexander Edler. Tied for the NHL lead with 10 goals, Ovechkin moved in on Luongo and got the Vancouver goalie moving with his first fake, but was unable to finish.
Canucks forward Alexandre Burrows returned to the lineup after breaking a bone in his right foot in the season opener.
Although Burrows was back healthy, Vancouver's sick bay is still a busy place. Tortorella will be without David Booth for about two weeks, while fellow forwards Jannik Hansen and Dale Weise are both expected to miss three-to-four weeks.
Vancouver forward Jordan Schroeder, who injured his left foot blocking a shot in the preseason, will require surgery to insert a pin in his ankle. Tortorella said he expects the second-year player to be out for two months.
NOTES: The Canucks continue their three-game homestand on Wednesday against Detroit. ... Vancouver will retire Pavel Bure's No. 10 jersey before Saturday's game against Toronto. ... The Capitals conclude their season-long five-game trip on Friday against Philadelphia. ... Musician Phil Collins was in attendance.