Portland held the lead throughout the second half but had difficulty pulling away until late in the fourth quarter.
"We got a win. That's all I'm worried about," said Portland guard Wesley Matthews, who had 15 points, all in the first half to help the Blazers complete a sweep of a four-game Eastern Conference road trip.
"To finish a road trip undefeated and to do it with the defense and energy that we had in the second half is great," Portland coach Terry Stotts said.
Luke Ridnour scored 13 points to lead the Bucks, who lost their sixth in row and eight of 10 on the season. They last won on Nov. 6 against Cleveland. Portland's last loss came a night earlier against Houston.
"Our margin of error is very small," Bucks coach Larry Drew said. "We're trying to dig ourselves out of a hole and the only way to do that is to play every possession like it's going to be the last possession. Portland is hot, needless to say, but we were right there but just couldn't get over the hump."
Milwaukee pulled within six points late in the fourth on Caron Butler's 3-pointer. However, Lillard had a breakaway dunk and a 3 of his own to put Portland up 89-78 -- matching the Blazers' largest lead of the game.
The Bucks got no closer than seven again.
"We are in positions to win games but in the fourth quarter we are just making mistakes," Milwaukee's Zaza Pachulia said. "We have to keep getting better individually and as a team because nobody is happy in this locker room."
Portland shot just 41 percent for the game while winning for the 10th time in 12 games this season.
"Our mentality is right. We're thinking greedy, we're thinking `win' like we're supposed to," Matthews said.
Bucks guard O.J. Mayo, who had nine points, added to the Bucks' injury woes when he sprained his left ankle.
Portland opened the third quarter on a 8-0 run to take a 61-51 lead. The Blazers took an 11-point lead late in the quarter when Nicolas Batum hit a 3 as he fell to the court.
The Bucks responded as Ersan Ilyasova scored his first points of the contest when he made a 3, then followed it with a leaner in the lane to cut the deficit to 70-64 at the end of the quarter.
Portland held a 53-51 lead at the half. The second quarter ended with an exchange of traditional three-point plays.
Lillard drew a foul after making a reverse layup on a strong drive to the basket. Ridnour then made an acrobatic floater along the baseline while being fouled as the clock wound down. Ridnour, who has been battling a back injury, had 11 first-half points for the Bucks.
Milwaukee shot 50 percent over the first two quarters, compared to nearly 49 percent for the Blazers. Milwaukee finished the game at 44 percent, while Portland connected on just 41 percent of its shots.
Stotts said he was disappointed with his team's first-half defense.
"In the first half, there were three or four times where we had a chance to really nail down a defensive possession and it seemed like (Milwaukee) came up with the ball and finished the play."
Matthews, returning to the arena where he starred in college for Marquette, scored 13 points in the first quarter, including a trio of 3-point field goals, but the Bucks held a 24-23 lead.
Ilyasova and Butler returned to the Bucks' lineup after missing time because of injuries. Ilyasova saw his first action since Nov. 2. Brandon Knight remained out with a sore hamstring. Ten players saw action in the opening period for the Bucks, who dressed only eight players for a Nov. 13 game against Orlando. ... Portland has won eight in a row in the same season for the first time since a 13-game streak in December 2007.