Nico Sturm and Matt Nieto scored for San Jose (2-7-0), which was beginning a six-game homestand. James Reimer made 27 saves.
"We shot ourselves in the foot again at home, and we've got to be better," Sharks coach David Quinn said. "Your biggest mistakes cannot be of that magnitude if you're going to have success in this league."
Kessel scored his first of the season to give Vegas a 1-0 lead at 15:51 of the first period. Brett Howden got control of the puck in the Golden Knights zone and sent a lead pass to Kessel, who warded off Matt Benning and chipped a shot over Reimer.
"It was just pure happiness from everyone," Karlsson said. "Everyone was just cheering and howling. It was really good to see it go in."
Sturm tied it 1-1 at 5:33 of the second period when he redirected a point shot by Kevin Labanc.
"We had some good zone time, and you know [Labanc] is a guy who likes to shoot the puck, so I knew he was probably coming my way one way or another, so I just tried to get a stick on it," Sturm said.
Nieto put the Sharks in front 2-1 at 19:25, receiving a stretch pass from Tomas Hertl and shooting glove side on Hill on a breakaway.
"That was probably our best second (period) of the season," Hertl said.
Theodore scored 55 seconds into the third period on a shot through traffic to tie it 2-2.
Karlsson then gave Vegas a 3-2 lead at 13:13, cutting around Erik Karlsson in the neutral zone before beating Reimer over his right shoulder.
"We weren't happy with the second period overall," Karlsson said. "It was a bit sloppy there to let them get the go-ahead goal. We talked about it, and we were determined to turn things around. It was good to see."