Romero, back from a ban for his fourth Tottenham red card, opened the scoring after only 11 minutes with his fourth Tottenham goal. Pedro Porro's corner found the Argentine for a looping header past Lukasz Fabianski.
Spurs dominated with the Hammers finding it incredibly tough to break out against their high press, let alone forge a goalscoring opportunity. Yet, their hosts were unable to seriously test Fabianski again for long stretches, the Polish goalkeeper parachuted into the XI after a wrist injury for Alphonse Areola.
Mohammed Kudus finally unpicked the Tottenham defence after 44 minutes but Lucas Paqueta fluffed his lines with an unmarked header at the far post. Up the other end almost immediately, Kurt Zouma turned a dangerous cross into his six-yard box onto the post and behind.
After the break, West Ham levelled up quickly with a long ball sparking a counter that led to Mohammed Kudus firing at goal. Not one but two deflections off Tottenham defenders saw the ball fall for Bowen to fire home his 50th West Ham goal.
Letting a lead slip for the fifth game in a row shook Spurs, leading to Ange Postecoglou throwing Richarlison on for the final 20 minutes. Yet, the Brazilian headed a lovely Porro cross wide only moments later.
Despite regaining control, Tottenham's inability to grab a second goal was again punished when the bounce of the ball once more favoured West Ham. However, it was a moment of Spurs' own doing as Destiny Udogie's weak backpass was squirmed away by Guglielmo Vicario as Bowen raced in.
Ward-Prowse was first to it and even struck the post with his effort, but was able to follow in the rebound to make it 2-1.