After an even first half, Tomas Soucek headed home early in the second half as Wolves once again conceded from a set piece.
Mohammed Kudus then had a second chalked off by VAR, before Matt Doherty snatched an impressive equaliser.
But that stalemate lasted just three minutes before Jarrod Bowen swept home the winner to put O’Neil on the brink.
Analysis
--------
O’Neil made three changes to the side that lost 4-0 at Everton last time out.
Sam Johnstone replaced Jose Sa in goal, with Sa not in the squad, while Craig Dawson was dropped for Toti Gomes and Nelson Semedo returned from suspension and replaced Goncalo Guedes.
Former Wolves boss Julen Lopetegui named former Wolves captain Max Kilman in his team, after the centre-back made a £40million switch in the summer.
The West Ham players warmed up in special ‘Antonio 9’ shirts in support of striker Michail Antonio, who has undergone surgery on a lower limb fracture following a car crash on Saturday afternoon.
The home side then walked out in tops with the striker’s name on ahead of kick-off.
It was a fairly quiet and even opening 15 minutes with both sides getting into decent positions but having few sights of goal. Wolves were finding Doherty in plenty of space on the right.
Bowen did find space from a tight angle but Johnstone made a smart save.
![](https://www.shropshirestar.com/resizer/v2/https%3A%2F%2Fcontentstore.nationalworld.com%2Fimages%2F1b974f25-7d97-43dd-a569-493ac909a0bc.jpg?auth=10d0e7bac666f201c6e0a35173f3db8e03263b459da78a4cdc8d8c4700c22353&width=300)
Jorgen Strand Larsen (Getty)
Matheus Cunha then almost caught Lukasz Fabianski out with a drive towards the near post, but the goalkeeper was equal to it.
A fantastic ball from Crysencio Summerville put Carlos Soler through on goal, but his shot was blocked by the recovering Rayan Ait-Nouri to save Wolves.
The visitors almost took the lead when Jorgen Strand Larsen found Doherty with an accurate cross-field ball. His brilliant first time cross finds Joao Gomes, who almost bundles it home at the far post and should do better.
At the other end, Johnstone almost parries the ball to a West Ham player and from the resulting corner Konstantinos Mavropanos should score from close range, but he blasts over the bar.
Wolves then had a handful of shots blocked in a scramble in the box just before the half-time whistle was blown.
All of Wolves’ good work in the first half was undone less than 10 minutes into the second when West Ham took the lead.
A corner came in and Soucek was completely unmarked at the far post to head back across goal and find the far corner. Mario Lemina was attempting to get across to Soucek but was blocked by Kilman, as Wolves conceded another set piece goal.
Shortly after, Kudus tapped home a second but VAR intervened and chalked it off for offside.
Wolves were screaming for a penalty when substitute Goncalo Guedes went down in the box, but a brief VAR check did not overturn it.
Moments later, however, Wolves were level. Guedes released Ait-Nouri who crossed for Doherty, who slid in on the volley to equalise in style.
![Matt Doherty (Photo by Alex Pantling/Getty Images)](https://www.shropshirestar.com/resizer/v2/https%3A%2F%2Fcontentstore.nationalworld.com%2Fimages%2Fba0cec5e-c92d-4c7b-bb42-e380d210ca02.jpg?auth=342bdea74b4ce5a9c96f0eb9c82871971d31f1d2220d6034b34c62189755474a&width=300)
Matt Doherty (Photo by Alex Pantling/Getty Images)
But Wolves’ respite lasted just three minutes as Bowen danced beyond Guedes too easily and curled into the bottom corner from the edge of the box.
Once Wolves settled and survived a West Ham onslaught, they began to create chances and had a great opportunity when Cunha found Lemina on the edge of the box, but he shot straight at Fabianski when he could have taken a touch.
Moments later, Jean-Ricner Bellegarde pounced on a mistake and charged forward. Eventually Cunha picked out Tommy Doyle but he blazed over.
VAR then briefly checked a possible penalty as Mavropanos stepped on Bellegarde’s foot, but it was not given.
Kudus then had the ball in the net but was flagged offside, before eight minutes of added time were announced.
But Wolves were unable to find a second equaliser as they fell to a third consecutive defeat.
At full-time, a scuffle broke out between both sets of players and Lemina was booked.
The captain then lost his head and started pushing and shoving team-mate Toti, as staff pulled him away.
After going over to see the travelling fans briefly, he then headed down the tunnel.
Key Moments
-----------
GOAL 54 Soucek heads the Hammers in front
GOAL 69 Doherty slides home a Wolves equaliser
GOAL 72 Bowen curls home a second for West Ham
Teams
-----
Wolves: Johnstone, Doherty, Semedo, Bueno, Toti, Ait-Nouri (R.Gomes, 86), Andre (Bellegarde, 62), Lemina, J.Gomes (Doyle, 78), Cunha, Larsen (Guedes, 62).
Subs not used: Bentley, Dawson, Lima, Forbs, Hwang.
West Ham: Fabianski, Wan-Bissaka, Kilman, Mavropanos, Emerson (Cresswell, 87), Soucek, Alvarez (Todibo, 87), Soler (Paqueta, 64), Kudus (Rodriguez, 87), Bowen, Summerville (Ings, 73).
Subs not used: Areola, Coufal, Guilherme, Fullkrug.