After Cleveland tied the game in the eighth inning off Casey Fien, Willingham hammered his ninth home run of the season into the left field stands.
Glen Perkins picked up his 23rd save of the season with a 1-2-3 ninth inning.
It was the first win for the Twins since the All-Star Break.
Willingham finished the night 2-for-3 with two runs scored and the home run. He had help, Kurt Suzuki kept swinging a hot bat, he was 3-for-4 with a big two-run double to give the Twins the early 2-0 lead.
After Cleveland cut the Twins lead to 2-1, Trevor Plouffe smacked his 29th double of the season to drive in his 45th run of the year.
Kris Johnson completed five innings and held the Indians to two runs on five hits. Johnson struck out four and walked three, he left the game in position to pick up his first Major League win, but the Twins bullpen wasn't able to hold it for him.
Fien (5-4) got the win instead.
Twins manager Ron Gardenhire announced before the game that Yohan Pino would return to Minnesota to start Tuesday's game against Cleveland.