Duff: Celebrates his winner against Everton
Duff struck in the 79th minute after Tim Cahill had given the visitors a first-half lead, with Paul Konchesky's deflected strike levelling matters early in the second period.
The win sees the Cottagers jump out of the drop zone and into 10th, while David Moyes' men remain 19th.
Duff and Clint Dempsey both fired in efforts on Tim Howard's goal as the home side started brightly, but David Stockdale had to be alert at the other end to keep out Jack Rodwell's deflected drive with his feet.
Dempsey was proving influential early on and he twice headed wide before the Toffees broke the deadlock in the 33rd minute.
Danny Murphy was booked for a challenge on Steven Pienaar and from Leighton Baines' resulting free-kick Cahill, who looked to be offside when the ball was played in, thumped home a superb header to leave Stockdale with no chance.
Duff blazed over the bar early in the second half as Roy Hodgson's men looked to level matters - and they did just that in the 57th minute when Murphy's free-kick from the edge of the box was blocked by the wall but fell to Konchesky, whose strike deflected off Sylvain Distin and left Howard stranded.
The visitors suffered an injury blow when skipper Phil Neville was stretchered off after a full-blooded challenge with Dickson Etuhu - Dutchman John Heitinga being handed a Toffees debut as his replacement.
And the Cottagers took the lead with 11 minutes to go when Duff cut in from the right and unleashed a powerful drive into the far corner from 20 yards.
It could have been 2-2 a minute later, however, but Marouane Fellaini's close-range header was kept out by Stockdale and then Murphy cleared Joseph Yobo's follow-up effort off the line in a frantic finale.