Wilfried Zaha, back from injury, opened the scoring with a smart shot from the edge of the area after just three minutes.
Soucek hit back almost immediately, heading in a neat flick from Michail Antonio.
The Czech midfielder had Antonio to thank again before half-time as the forward missed the ball to allow his team-mate to volley home Aaron Cresswell’s free kick.
Antonio hit the post either side of Soucek’s second goal and again early in the second half, before being denied twice from close range in a frustrating display.
Craig Dawson settled the game, heading home Jarrod Bowen’s corner, with 20 minutes to play.
In truth, West Ham never looked in real trouble after going ahead and will now spend, at least, the evening in the top four.