Phil Jagielka's first league goal for Everton inflicted a seventh straight defeat on Reading in a scrappy match.
Goalscorer Jagielka (centre) is congratulated by team-mates
It might have been different had Tim Howard not been equal to Stephen Hunt's first-minute free-kick, but the result pushes Reading into the bottom three.
On 62 minutes, Jagielka scored the winner with a looping header before Leon Osman nearly added a second but his cross-cum-shot hit the cross bar.
James Harper hit the post as Reading pushed for an elusive equaliser.
Reading beat Everton for the first time in the reverse fixture in August, with Hunt scoring the only goal of the game.
And inside a minute, Hunt almost put the match on a repeat path when his free-kick forced Howard to gather at the second attempt.
It was a lively start which was to prove only a tease as neither side moved the ball quickly enough and the game became a series of tangles, tussles and misplaced passes.
Twenty minutes dragged past before the next effort on target, but Andrew Johnson's shot lacked the pace to trouble Marcus Hahnemann.
The match desperately needed a spark but the only one that came was Hunt's angry reaction to a high Lee Carsley challenge.
As half-time approached, two chances came Everton's way and both fell to Tim Cahill.
But the normally clinical midfielder had looked out of sorts - unsurprising after he played for Australia in Melbourne in midweek - and the ball came off his shin as he swung at a cross and then he headed over from a corner.
Shortly before, Oster had fizzed a free-kick narrowly over in one of Reading's few efforts on goal.
Everton brought on James Vaughan for Manuel Fernandes at half-time and the change almost brought instant reward when Cahill was an inch away from converting the substitute's low cross.
The visitors responded and Kevin Doyle screwed a shot wide but they were soon stunned when Everton took the lead, slightly against the run of play.
Reading could only clear a corner to Osman and his lofted ball back into the box found Jagielka, who headed back across goal to beat Hahnemann.
Everton's lead was almost doubled when Osman's cross from the left drifted onto the bar.
And Vaughan produced a superb overhead kick that forced a full-length diving save from Hahnemann.
The hosts almost paid for the miss when Harper took aim and was only denied an equaliser by the outside of the post.
Almost immediately, Johnson should have wrapped up the points for Everton but shot wide when clean through.
However, Everton held on for a win that sends Reading deeper into relegation trouble.
Everton manager David Moyes:
"It was a good win and throughout the season you win all different ways. I don't think we were fortunate but we had to grind it out.
"I was a bit worried that we wouldn't score today. We can and will play better than we did.
"Credit to Reading who kept going right to the end and kept us under pressure."
Reading manager Steve Coppell:
"At half-time I thought we were the better side and we were playing some good stuff.
"We had good opportunities and hit the woodwork. Sometimes when you are down at the bottom of the table you do not get the run of the green.
"Our performance was really good. We didn't get the result but if we play like that we will be ok."
Everton: Howard, Neville, Yobo, Jagielka, Lescott, Arteta, Carsley, Fernandes (Vaughan 46), Osman, Cahill, Johnson.
Subs Not Used: Wessels, Hibbert, Van der Meyde, Nuno Valente.
Goals: Jagielka 62.
Reading: Hahnemann, Murty, Sonko, Cisse, Shorey, Oster (Kebe 81), Harper, Matejovsky, Hunt, Doyle, Kitson (Long 75).
Subs Not Used: Federici, Rosenior, De la Cruz.
Ref: Mark Halsey (Lancashire).
BBC Sport Player Rater man of the match: Everton's Phil Jagielka 7.46 (on 90 minutes).Please note that you can still give the players marks out of 10 on BBC Sport's Player Rater after the match has finished.