The Blues took a 1-0 lead with 7:14 left in the first when Stewart fired a shot from the point on the power play that beat Bryzgalov for his 14th goal.
The Oilers took advantage of a giveaway at the St. Louis blue line 1:36 into the second. David Perron sent Yakupov streaking up the wing, and he put a wrist shot past Elliott.
The Blues responded 42 seconds later when Lapierre pushed rookie Brad Hunt off the puck along the boards, took it to the net, and hooked a shot past Bryzgalov.
It was difficult to tell how the puck went in, but officials checked for a hole in the net. Lapierre played in his 500th NHL game.
"I didn't see a hole in the net," Elliott said. "I haven't seen the replay, but I hear it was a bit of an optical illusion."
Edmonton kept pace with a goal five minutes into the middle frame to make it 2-2. Luke Gazdic sent a pass from behind the net, and Arcobello chipped it up and over Elliott and into the net.
St. Louis regained the lead with nine minutes left in the second. The Blues' power-play unit kept the Oilers hemmed in their zone before Backes scored his 17th goal.
The Blues made it 4-2 with 6:03 left in the second. A faceoff win allowed Tarasenko to score on a quick shot from the top of the circle.
Blues forward T.J. Oshie had to be helped off the ice late in the third period after a knee-on-knee collision with Hall.
Berglund sealed the win with an empty-net goal.
NOTES: St. Louis has 10 players heading to Sochi for the Winter Olympics. Edmonton has three. One of the Oilers, Anton Belov was picked for the Russian team, despite being a healthy scratch for Edmonton the last three games. ... Blues G Jaroslav Halak returned to the lineup following an illness. D Roman Polak (lower body) and leading scorer Alex Steen (concussion) remained out. ... Oilers D Corey Potter (groin) missed his sixth game. D Philip Larsen (illness) was also out. ... Oilers forward Ales Hemsky left the game after a first-period hit from St. Louis' Ryan Reaves.