West Ham needed a late Ricardo Vaz Te goal to earn a point as they blew their chance to go top of the Championship.
Teenager Sean Murray fired Watford ahead midway through the second half with a fierce low drive.
Hornets keeper Tomasz Kuszczak, on loan from Manchester United, produced excellent saves to deny Mark Noble and James Tomkins.
But Vaz Te scored via the far post as West Ham moved to within a point of Championship leaders Southampton.
Although the Hammers have a game in hand over Southampton, manager Sam Allardyce will see this as two points dropped, particularly as his side created enough chances to secure a comfortable victory.
Watford, for their part, defended doggedly and were just three minutes away from securing a third successive win at Upton Park.
Matt Taylor, back in the West Ham line-up after a three-match ban, crashed a shot against the crossbar from 30 yards with less than a minute of the game gone.
The Hammers twice opened up a stubborn Watford defence just before half-time, only for Kuszczak to come to the visitors' rescue with saves from Noble and Tomkins.
Just before the hour mark, Watford lost Dale Bennett, who was carried off on a stretcher wearing a neck brace after colliding with team-mate John Eustace.
West Ham's failure to punish Watford proved costly as 18-year-old midfielder Murray shot home off the far post.
However, Vaz Te fired goalwards from a corner and the ball squeezed over the line before Kuszczak could react.