He added a go-ahead, two-run double in the eighth, which snapped a 2-2 tie with one out in the inning.
Also in the eighth, Detroit Manager Jim Leyland was ejected by third-base umpire Kevin Causey two batters earlier for arguing a close play at third.
Cabrera was the only player with more than one hit for the Tigers, who rose to 2-4 on their 10-game home stand.
The winner was Gary Glover (2-3) after a scoreless eighth. Fernando Rodney worked around a two-out walk in the ninth to record his seventh save.
Kansas City scored on Carlos Guillen's sixth-inning, solo homer and a wild pitch by Tigers starter Armando Galarraga in the third.
Alberto Collaspo had three hits and Billy Butler two for the Royals, who have lost 5 of 6.
The losing pitcher was Kip Wells (1-3).