The Toffees seemed down and out when goals early in the second half from Richarlison, set up by Andre Gray, and Christian Kabasele, with a header from a corner, put the Hornets in control.
But Oumar Niasse capitalised on a mistake by substitute goalkeeper Orestis Karnezis and substitute Dominic Calvert-Lewin headed the equaliser from a corner.
Baines won it from the spot after substitute Aaron Lennon was fouled by Jose Holebas within a minute of coming on.
Tom Cleverley might have equalised in the 10th minute of stoppage time but the former Everton midfielder drove his penalty wide.
The victory takes Everton out of the relegation zone.
Everton: 18 Nov v Crystal Palace (A)
Watford: 19 Nov v West Ham (A)