The home side made the most of the running in the first half, but found City goalkeeper Tom Heaton in fine form.
The former Manchester United stopper actually signed for Watford in July but the contract was scrapped just days later after a takeover at Vicarage Road by the Pozzo family, who own Serie A outfit Udinese.
As a result Heaton, who was a free agent after leaving Cardiff, was approached by City and moved to Ashton Gate instead.
He impressed in the opening 45 minutes, saving early on from Nathaniel Chalobah and Mark Yeates.
Sean Murray, who was kept out of Watford's 1-0 defeat to Brighton in midweek after suffering a dead leg, was the next to be denied.
Watford's former Arsenal stopper Manuel Almunia was called into action after 34 minutes, producing an excellent parry to keep out a Martyn Woolford 20-yard effort.
City came close to taking the lead just three minutes after the interval, Woolford's left-foot shot from 12 yards beating Almunia but coming back off a post.
Substitute Troy Deeney was back in the Watford fold after serving a prison term, and Hornets boss Gianfranco Zola sent him on in the 55th minute for the ineffective Fernando Forestieri.
Deeney was immediately involved, forcing Heaton into a notable parry before lashing a a 20-yard right-foot shot just wide.
Watford had been the better side for most of the contest but had found Heaton unbeatable - until Wilson succeeded where the home side had failed as he turned the ball into his own net from six yards.
The lead had lasted just four minutes when City midfielder Elliott met Joe Bryan's cross to head in from six yards. It was the visitors' 1,000th goal in the second tier of English football.
Watford kept probing and Czech striker Vydra - on loan from Udinese - got on the end of Daniel Pudil's cross to drill a 12-yard shot beyond Heaton and restore the home side's lead.
However, their hopes of a second home win this season were dashed by Davies' late intervention.