Austin Jackson hit a tiebreaking home run, Jose Valverde struck out the side in the ninth for seventh save and the 200th of his career, becoming the 41st player in major league history to reach the mark.
Jose Bautista homered in his return to the lineup after missing five games with a stiff neck.
Penny (3-3) responded to the third-inning shot by retiring 10 straight batters and 14 of the next 15. The right-hander allowed two runs and seven hits in a season-high 7 2-3 innings, walked none and struck out one.
Jackson went 3 for 5, his second straight three-hit performance, and is batting .368 (14 for 38) over his past 10 games.
Detroit won for the fifth time in six games to move within one game of .500. The slumping Blue Jays have dropped six of eight.
Jackson broke a 2-2 tie with a two-run homer to left in the seventh, his second. The Tigers have hit at least one homer in 10 of their past 11 games in Toronto, dating to April, 2008.
The drive came off Blue Jays left-hander Jo-Jo Reyes (0-3), who has gone 25 starts since his last win. Reyes' last victory came June 13, 2008, against the Los Angeles Dodgers, when he was pitching for Atlanta.
Reyes allowed five runs and eight hits in seven-plus innings. He walked one and struck out one.
After missing five games with a stiff neck, Bautista returned with a bang, drilling a two-run homer off the facing of the second deck in left in the third. The homer was his 10th of the season.
Detroit tied it in the fourth. Scott Sizemore drew a leadoff walk and, two outs later, scored on Victor Martinez's double to center. The Blue Jays looked to have Martinez out at the plate on Jhonny Peralta's single to left. But after making the tag, catcher J.P. Arencibia dropped the ball when his glove hit the ground, and plate umpire CB Bucknor ruled Martinez safe. Manager John Farrell came out to argue, but the call stood.
Detroit took the lead with another two-out rally in the seventh. Brandon Inge singled to right and Jackson followed with a homer to left.
The Tigers tacked on an insurance run in the eighth. Magglio Ordonez chased Reyes with a leadoff double and was replaced by pinch-runner Don Kelly. Miguel Cabrera greeted Jason Frasor with an RBI single to center.
NOTES: Bautista started at DH but Farrell said he could return to the outfield on Monday. ... Blue Jays 1B Adam Lind, who left Saturday's game with tightness in his lower back, did not start Sunday but said he hopes to return Monday. ... Toronto 2B Aaron Hill started for the first time since April 19 after being activated off the 15-day DL Saturday. Hill had been sidelined with a strained right hamstring. ... Detroit's Max Scherzer (5-0) faces Toronto's Brandon Morrow (1-1) in Monday's series finale.