The former England defender, who rejected a move to Liverpool earlier this month, dealt a blow to the other side of Merseyside with his ninth-minute winner. It was Villa's second league win under MacDonald as they bounced back from their Europa League exit at the hands of Rapid Vienna.
Villa had leaked nine goals in their previous two matches, including a 6-0 mauling by Newcastle at St James' Park. But they managed to hold on for a clean sheet despite being on the defensive for lengthy periods.
Everton dominated for lengthy spells in terms of possession with Mikel Arteta pulling the strings in the middle of the park. But they lacked a cutting edge until Louis Saha was brought on early in the second period. It means Everton are still searching for their first win of the campaign and have collected only one point from a possible nine.
Ashley Young posed the biggest threat for Villa while Nigel Reo-Coker - a late replacement for Stephen Ireland after he was injured in the warm-up - made his presence felt in midfield. The visitors, searching for their first league win of the campaign, started the brighter of the two teams.
But after nine minutes Villa took the lead through Luke Young's second goal for the club since his move from Middlesbrough in the summer of 2008. John Carew headed the ball into the path of Ashley Young who held the ball up before releasing Luke Young. He kept his nerve before driving a left-footed shot wide of Tim Howard.
Everton tried to retaliate and Dunne was booked for body checking Jermaine Beckford 25 yards from the Villa goal. Arteta curled the free-kick over the defensive wall although Brad Friedel made a comfortable enough save. But the veteran keeper was beaten in the 18th minute by Pienaar's curling effort from the edge of the box which crashed against the crossbar.
Marouane Fellaini got on the end of a hanging centre from Baines but his header lacked direction or power. Everton recovered well from their setback and started to enjoy the lion's share of possession with Baines and Hibbert getting forward to good effect. Everton forced six corners by the half-hour mark compared to Villa's one.
Marc Albrighton tried his luck from 20 yards out and his shot cannoned off Sylvain Distin for a corner. Villa appealed in vain for a penalty in injury-time after a challenge from behind on Albrighton by Pienaar following a darting run.
Villa began the second half in a more positive vein and Carew was not far off target with a glancing header from Ashley Young's right-wing cross. Ashley Young then made a probing run forward in a quickfire counter-attack before striking his 20-yard effort just past the post.
David Moyes made his first substitution after 56 minutes with the ineffective Beckford replaced by Saha. Tim Howard made a fine double save to keep out Carew's cross shot and the follow-up attempt from Ashley Young. At the other end Friedel also excelled to keep out Saha's volley while Jack Rodwell's header flashed wide from a Arteta free-kick.
Collins and Albrighton were booked in quick succession for fouls on Cahill and Baines respectively. Villa striker Gabriel Agbonlahor came on in place of Carew after 68 minutes while Rodwell made way for Seamus Coleman two minutes later. Albrighton should have made it 2-0 but shot over with the goal at his mercy after Howard had parried Ashley Young's shot.
Villa skipper Stiliyan Petrov was yellow carded for a challenge on Pienaar and Moyes brought off Hibbert for John Heitinga with 10 minutes remaining. Phil Jagielka headed over from Arteta's corner as Villa held on desperately in the closing stages.