Villar connected off Joe Saunders (11-14), sending a drive well over the left-field fence for his first career homer.
The Astros scored six times in the first three innings to chase Saunders. The left-hander allowed seven hits and a walk. He has lost six of his last eight decisions.
Chris Carter and Jose Altuve each had three of the Astros' 17 hits. Houston's 10 extra-base hits were a season high, eclipsing the previous mark of nine also set against the Mariners.
Altuve and rookie L.J. Hoes both had three RBIs. The total was a career high for Hoes, who entered with five RBIs in his 38-game career.
Meanwhile, starter Jordan Lyles (7-7) held Seattle in check through six innings. Lyles gave up two runs one earned and three hits while striking out five.
Jorge De Leon and Rhiner Cruz combined to throw three scoreless innings in relief of Lyles.
Franklin Gutierrez had a pair of RBI singles for the Mariners, who have lost their last three games.
Villar walked, stole two bases and scored during Houston's four-run third that broke the game open. Altuve and Matt Dominguez had run-scoring hits in the inning. Hoes capped the outburst with a two-run double that made it 6-1.
The Astros kept the pressure on the Seattle bullpen by scoring seven runs in the final three innings.
Houston had its way on the basepaths, successfully stealing bases on all five attempts against rookie catcher Mike Zunino. Altuve swiped three and has stolen a career-high 35 this season.
NOTES: Altuve leads the majors with 21 hits in September. ... During the game, Seattle traded smooth-fielding shortstop Brendan Ryan to the New York Yankees for a player to be named. Ryan lost his starting job to Brad Miller shortly after the rookie was called up from Triple-A Tacoma on June 28.