The score was tied 2-2 with 3:17 to play when Ryan Getzlaff got control of the puck behind the net and sent a pass to Penner in the high slot.
The Ducks left wing unleashed a hard wrist shot that deflected off the stick of Oilers defender Jeff Petry and sailed past Ilya Bryzgalov into the top corner of the net for the decisive goal.
Nick Bonino and Teemu Selanne also scored for the Ducks, who improved to a franchise-best 13-0-2 at Honda Center and remained the only NHL team without a home regulation loss.
Jonas Hiller earned the victory with 23 saves.
Sam Gagner and Ryan Nugent-Hopkins scored for Edmonton, which dropped a third straight.
Bryzgalov finished with 31 stops.