Los Angeles hadn't scored more than five runs since beating Oakland 9-5 on April 23, a span of 18 games.
"We knew it was going to come," Lackey said. "They have been working hard, and hopefully they will be able to keep this going."
Lackey (4-2) took advantage of the offense and allowed only three runs and eight hits in 7 2/3 innings. He walked a season-high five batters.
"The first couple innings, John's stuff was very good," Angels manager Mike Scioscia said. "After that, he got out of whack a little, but he got deep into the game and held that team to three runs. That's what you want."
Nate Robertson (1-3) took the loss, allowing six runs -- only one earned -- on five hits and two walks in three innings.
"I felt I wasn't throwing that bad, for the most part I was getting ahead of hitters," he said. "One big hit was a double with an 0-2 count to Molina. It was a slider. That was not my best pitch. It was my fault. It's frustrating."
The Angels broke open the game in the third, helped by poor Tigers defense.
After Adam Kennedy's leadoff single, Robertson made a bad throw -- allowing Chone Figgins to reach first. Darin Erstad grounded into a force at second, and Vladimir Guerrero followed with an RBI single.
"In the last few games, the quality of our at-bats has been improving," Scioscia said. "That was going to lead to improved production, and that's what we saw today."
"Juan's one of those guys who is fighting for at-bats right now," Scioscia said. "So it is good to see him get a big hit."
The Tigers got a run in the fifth on Omar Infante's RBI double, but another mistake killed the rally. With no one out and runners on second and third, Nook Logan hit a grounder to Erstad at first. Erstad stepped on the bag and then ran across the diamond to tag Infante, who had broken for third while Pena never moved.
"It was just one of those games," Brandon Inge said. "We didn't play good defense and we didn't hit the ball well, either. It's just one you have to write off."
Detroit lost another runner in the next inning when Carlos Guillen was thrown out trying to stretch a double.
"Sloppy baseball stinks and today stunk," Tigers manager Alan Trammell said. "We played a very poor game. We made a lot of mistakes. Why it happened, I couldn't tell you."
Two Detroit starters left the game with injuries. Catcher Ivan Rodriguez was forced out in the third inning with a bruised left big toe after being hit by a foul tip while catching. DH Dmitri Young left in the seventh after twisting his left ankle while beating out an infield single. X-rays on both were negative and they are day-to-day. ... Guillen extended his hitting streak to
a career-best 12 games. ... Chris Spurling pitched the ninth for Detroit, his first major-league appearance since 2003.