Harden shot 11 of 18 from the floor to go with seven assists and four steals for Houston, which has won 10 of its past 13 games.
After trailing by 18 in the second quarter, Houston outscored Milwaukee 30-14 in the third and led 77-72 at the start of the fourth.
"Really, that third quarter is about as good as we can play," McHale said. "We locked down on the defensive end, we pushed it up, we got shots and made shots . Then we started blowing some of their plays up just by being aggressive. I was really proud of the guys."
Lin was taken to the locker room with 10:34 left in the third after the left side of his head was slightly bloodied when he collided with the right cheek of Milwaukee's Larry Sanders as the two scrambled for a loose ball near midcourt. After getting five stiches, he returned to the bench with just under 3 minutes left in the period and started the fourth quarter.
"I just know that when I came back, our guys were flying around with high energy," Lin said. "We were getting stops, just the way we're supposed to play, the way that we've played in the past in some spurts. And then we just tried to carry it over to the fourth quarter."
The Rockets, who shot 54 percent from the field, also got 22 points from Carlos Delfino in his return to Milwaukee. He played for the Bucks from 2009-12 before signing with Houston as an unrestricted free agent in the offseason.
"I was sad, I thought I was staying in Milwaukee," Delfino said. "I was playing well in the second half last year. When I didn't have an offer on, I didn't blame anyone, I understand it's a business."
Milwaukee equaled a season worst by losing its third game in a row despite 16 points from Brandon Jennings.
"It's almost the second half of the season," Jennings said. "Teams are going to start turning it up a notch and we need to, also."
Houston, which remains on the road for eight of its next 10 games, pulled away with a 13-0 run midway through the fourth quarter.
It started with three consecutive 3-pointers. After Patrick Patterson drilled one, Harden made two of them. He was fouled on the first but missed the free throw, and then added another after an offensive rebound by Patterson for a 104-90 lead.
"Shoot the ball. Catch and shoot," Harden said. "I work on that every single day. The opportunity was in my hands and I took advantage of it."
After a layup by Lin, Harden capped the run with two free throws for a 108-90 lead with 4:12 to play.
Milwaukee committed five turnovers during that stretch and finished with a season-high 25 in the game.
The Rockets scored 19 of the first 21 points of the third period and took a 66-60 lead on a layup by Toney Douglas with 6:19 to play.
Milwaukee opened the quarter with three turnovers in a row and then missed 13 straight field goals. The Bucks shot 20 percent in the quarter.
"It just appeared that we just lost focus coming out of the locker room," Milwaukee coach Scott Skiles said. "We had a lot of trouble. That's as bad a collapse as I've ever seen. And it happened so fast: turnover, turnover, turnover. And we looked like we just started going 1-on-1 instead of kind of moving the ball like we did in the first half. And then when we did get a decent shot at the basket, if we missed, we didn't run back. They just ran right by us and went down and scored."
In the second quarter, a 22-5 run by Milwaukee gave the Bucks an 18-point lead, their largest of the game.
Milwaukee held a 26-25 lead when it scored 10 points in a row, capped by a layup by John Henson for a 36-25 lead with 8:37 remaining.
Another layup and free throw by Henson gave the Bucks a 48-30 advantage with 5:55 to play.
"It looked like they were going to maul us," McHale said.
Harden scored at least 20 points for the 15th consecutive game. ... Houston is 13-2 against the Eastern Conference, including 5-1 on the road . ... Jennings has made at least one 3-pointer in 19 straight games and Sanders has blocked at least one shot in the last 18 contests. ... The Bucks are 2-8 against the Western Conference, including 1-6 against the Southwest Division. ... The last time Milwaukee lost three straight was Nov. 19-24.