Max Pacioretty, Tomas Plekanec and Josh Gorges also scored for Montreal, and Raphael Diaz added two assists.
Henrik Sedin replied for Vancouver, which got 34 saves from Roberto Luongo. He also stopped Pacioretty on a third-period penalty shot.
The winner came in the second period with the Canadiens killing a penalty. Canucks defensemen Dan Hamhuis and Jason Garrison got tangled up behind the Vancouver net on a breakout, with the puck caroming into the crease and off both of Luongo's skates before dribbling over the line at 16:12.
Eller, who wasn't even in the Canucks' zone at the time of the goal, was the last Canadiens player to touch the puck for a Montreal team that didn't score a short-handed goal all last season or through the first four games of 2013-2014.
Apart from that bizarre play, the story for a lot of the game was the play of Price and Luongo, with the pair matching each other save for save at times.
Down 2-1 after the Eller's goal late in the second period, Luongo kept the Canucks in it early in the third, including a stick save on Pacioretty's penalty shot attempt after the Canadiens' forward was hooked down by Vancouver defenseman Kevin Bieksa.
But the Canadiens extended their lead at 6:46 on the power play. P.K. Subban just held the puck in at the line and it eventually found its way to fellow defenseman Andrei Markov down low, who fed a wide open Plekanec for a tap-in past a helpless Luongo.
Canucks coach John Tortorella has been preaching a shoot-from-anywhere mentality, but his team failed to test Price until Bieska's effort from outside the Montreal blue-line with nearly 11 minutes gone in the period.
Gorges then made it 4-1 with a shot through traffic that Luongo didn't see, much to the delight of the large contingent of Canadiens fans at Rogers Arena.
With the Canadiens leading 1-0 after the first, Price made a number of stops on a Vancouver power play six minutes into the second period, including one in close on Ryan Kesler off a Henrik Sedin rebound.
The Canucks kept up the pressure and were rewarded a bit later on when the Canadiens couldn't get the puck out of their zone. Daniel Sedin picked up a rebound from Garrison at the side of the net and fed a blind behind-the-back pass to Henrik Sedin, who scored his first of the season - and 799th point of his career - at 13:12 to tie the score.
But three minutes later Eller's winner went in and it all went south for Canucks, who start a season-long seven-game road trip on Tuesday in Philadelphia against the Flyers.
Pacioretty drew a hooking penalty on Canucks defenseman Chris Tanev early in the first period before making Vancouver pay with his second goal of the season. The Habs forward took a pass in the slot with Montreal on the man advantage and fired a shot through Luongo's pads that dribbled across the line.
The goal was the first surrendered by the Canucks' penalty killing unit this season after going 18 for 18 through five games.
Price was the story for much of the rest of the opening 20 minutes, with a big rebound stop on Garrison on a Canucks' power play midway through the period. He then made a desperation save on Daniel Sedin with five minutes to go, which brought chants of ``Carey, Carey'' from Canadiens fans.
The Canadiens were without captain Brain Gionta because of what the team called ``family reasons.'' ... Canucks defenseman Alexander Edler served the first game of a three-game suspension for his hit to the head of San Jose Sharks forward Tomas Hertl on Thursday night. ... Canucks forward Zack Kassian returned to the lineup after serving his eight-game suspension for breaking the jaw of Edmonton Oilers forward Sam Gagner with a high stick in the preseason.