Mitchell Marner had two assists, and Petr Mrazek made 30 saves for the Maple Leafs (35-14-4), who have won three straight.
"I liked the game," Toronto coach Sheldon Keefe said. 'I thought we were good in a lot of areas, except the power play (0-for-4). Otherwise, I thought the guys did a good job."
Tom Wilson scored two goals, and John Carlson had three assists for the Capitals (28-18-9), who have lost three in a row overall and six straight at home. Ilya Samsonov allowed three goals on 10 shots before being replaced at the start of the second period by Vitek Vanecek, who made 16 saves in his first game since Feb. 1.
"There's frustration. I think you're probably angry more than anything else," Laviolette said. "It's our building and we're not getting it done. Something's got to be better."
Michael Bunting gave the Maple Leafs a 1-0 lead at 2:35 of the first period. Marner lifted the stick of Washington defenseman Martin Fehervary to win the puck in the right corner before passing to Bunting in the low slot.
Garnet Hathaway almost tied it at 5:54 when his deflection hit the post and bounced off the back of Mrazek, but Auston Matthews stretched out his stick and helped his goalie clear the puck off the goal line.
"You need sometimes little bounces like that to win the game, and that one was on our side today," Mrazek said. "Great defensive play by 'Matty.'"
Conor Sheary was able to tie it 1-1 with a redirection at 16:23, but William Nylander made it 2-1 at 18:49 when he scored from below the right circle off a pass by Tavares from behind the net.
Holl extended the lead to 3-1 with 1.6 seconds left in the period, knocking in a loose puck during a scramble in the crease.
"The ending of that first period was tough," Laviolette said. "You're looking at a game where it's tight. I thought we generated a lot, we didn't give up much until the end, and then we let up two goals towards the end of the first period, and that's not good."