Two hammer blows just after half-time condemned Villa to defeat on a miserable afternoon at blustery Villa Park.
West Ham skipper Kevin Nolan pounced twice inside the first three minutes of the second half, and a spirited revival by Paul Lambert's men went unrewarded.
Substitute Marc Albrighton and Belgium international Christian Benteke were both unlucky with efforts which hit the woodwork, but the home side could find no way back against a resolute Hammers outfit.
A swirling wind made life difficult for both sides right from the outset, and although Villa attempted to play some attractive football, several early moves broke down because of over-hit passes.
When Fabian Delph drilled a hard, low cross into the box in the ninth minute, the ball ricocheted off Andi Weimann's legs before he had chance to react, while Gabby Agbonlahor was unable to control when Weimann's pass arrived with pace.
In between those two frustrations, former Villa man Stewart Downing worked his way into a good position to send a left-footer curling over the bar, and in the 24th minute the winger might easily have opened the scoring.
Racing in to meet George McCartney's centre, he needed only a touch to convert from a couple of yards but was distracted by Ryan Bertrand's challenge and made no contact.
It was a vital contribution by the on-loan defender, albeit a painful one as he needed treatment after sliding into the post.
Matt Jarvis then changed through to create problems.
The former Wolves player's first attempt was blocked by Ciaran Clark into the side netting, while his second shaved the post as Nathan Baker challenged.
Delph produced Villa's best effort so far when he ended a forceful run with a powerful left-foot drive which flashed narrowly wide, and Westwood suffered the same fate with a stinging 41st-minute half-volley after McCartney had tried to head away Leandro Bacuna's fine cross.
But in first-half added time Bertrand was forced to head clear from the goalmouth after confusion in the home defence - and just 20 seconds into the second half the visitors were in front.
Downing cleverly outwitted Bertrand before playing the ball inside to Nolan, who beat Guzan with an impudent back-heel from seven yards.
Villa had barely recovered from that blow when they were dealt another.
Delph was dispossessed by Nolan just outside the penalty area and the Hammers skipper took a few strides forward before stroking a low shot past the advancing Guzan.
In the 56th minute Albrighton replaced Lowton and within 60 seconds the winger almost set up a goal.
Benteke looked a certain scorer when Albrighton lofted an inviting pass into the danger area but the Belgian striker failed to connect as he was challenged by Guy Demel.
Villa's sub was full of energy and in the 63rd minute his right-wing corner was met by a Baker header which was held by Adrian.
And Albrighton was desperately unlucky when his 25-yard drive smacked against the post and then went behind off the keeper.
Five minutes later, Albrighton popped up on the left and his cross was met by a looping Benteke header which beat Adrian but hit the bar.
Then Benteke was inches away from connecting with Albrighton's curling free-kick, and the Belgium international was only just too high with an overhead kick after Clark had headed on an Albrighton corner.
It was now all Villa but in the 83rd minute Matthew Taylor almost added a third for the visitors with a shot which hit Bacuna and went behind for a corner.
Villa: Guzan; Lowton (Albrighton 56), Clarke, Baker, Bertrand (Bennett 73); Bacuna, Westwood, Delph; Weimann (Holt 71); Agbonlahor, Benteke. Unused subs: Steer, El Ahmadi, Helenius, Sylla.
West Ham: Adrian; Demel, Collins, Tomkins, McCartney; Jarvis (Reid 74), Noble, Nolan (Nocerino. 68), Taylor, Downing; Cole (Borriello, HT). Unused subs: Jaaskelainen, Armero, Collision. Johnson.