Jimmy Rollins hit a two-run homer and Laynce Nix had a solo shot to back Lee (3-7). The 2008 AL Cy Young Award winner hadn't won at Citizens Bank Park since September 5, going 0-6 in his previous 12 starts.
Lee outpitched Jordan Zimmerman (9-8) by allowing one run and seven hits, striking out five. Jeremy Horst got an out in the eighth and Josh Lindblom got the last five outs for his first career save. Jonathan Papelbon had the day off after closing three straight games.
Zimmerman gave up three runs and five hits in five innings. His ERA went up to 2.63, third-best in the NL.
The third-place Phillies aren't going to win their sixth straight NL East title, but they were determined to make a statement against the Nationals. It was just the second three-game sweep of the season for Philadelphia, which closed within six games of .500 for the first time since losing to Pittsburgh on June 28.
The Nationals have lost four straight for the first time since June 15-19. They entered with a 5½-game lead over Atlanta.
Hurt by poor run support often this year, Lee got the offense going with an RBI double in the fifth. Kevin Frandsen singled to start the inning and advanced to second on a passed ball by Jesus Flores. Erik Kratz followed with a looper to center, but Bryce Harper made a sliding catch.
Lee, who hits well for a pitcher, then ripped one to deep center over Harper's head, scoring Frandsen for a 1-0 lead.
Rollins followed with a drive to the seats in right. The leadoff hitter has 15 homers, just three shy from taking the team lead away from the since-traded Hunter Pence.
Nix connected on an 0-2 pitch off Tom Gorzelanny in the sixth.