Paul Millsap scored 20 points and grabbed 12 rebounds as the Jazz won their fourth straight road game. Utah finished with 30 assists to offset 21 turnovers.
"We came out a little sluggish, which is understandable after the layoff," Williams said. "But I was happy with how we finished the game. It got a little sloppy toward the end, but we hung in there, we got stops when we needed to and we executed down the stretch."
Backup center David Andersen and Aaron Brooks scored 18 points apiece for Houston, which committed a season-high 24 turnovers. The Rockets shot better from 3-point range (42.3 percent) than they did from the field overall (40.5 percent).
Houston has dropped six of its last eight home games, and seven of 10 overall.
The teams were tied at 82 at the 8-minute mark, and they had combined for 37 turnovers to that point.
Williams and Carlos Boozer returned from a rest for Utah, but Houston coach Rick Adelman stuck with his bench players for a few more minutes.
Andersen sank two 3-pointers a minute apart to give the Rockets a 93-90 lead. But Millsap scored inside and Kyle Korver hit a jumper to put Utah back in front.
Andrei Kirilenko intercepted a pass by Andersen near midcourt and raced for a dunk to give the Jazz a 96-93 lead with 2:08 left. Houston matched a season high with its 23rd turnover.
Brooks and Trevor Ariza missed potential tying 3-point tries in the last minute and Williams' free throws with 17.8 seconds left put it away.
"It's a great way for us to dust off the rust from the break and get this road trip going," Boozer said. "In that fourth quarter, we did just enough to win the game."
The Jazz had a nine-game winning streak snapped by the Los Angeles Lakers just before the All-Star break, and Utah talked about the importance of starting off the second half with a victory in Houston.
"This game was very important, to get that confidence back after the Laker game," Williams said. "It was a great team victory."
Houston, meanwhile, let another winnable game slip away. The Rockets recently finished a stretch of 16 games decided by 10 points or less, and lost nine of those. They blew a 13-point lead in the second half of a 102-95 loss to Philadelphia on Feb. 6, and now this.
"We've talked about this over the course of the season," Adelman said. "We have to have everybody contributing, especially against a team like that. We were right there, we had every chance. We just didn't finish, and we have to find a way to finish it."
The Jazz led by as many as 10 in the first quarter, hitting 10 of their first 13 shots. The Rockets sank three 3-pointers in the first eight minutes to stay close. They finished 11 for 26 from 3-point range in the game.
The Jazz missed their first seven shots of the second quarter, and 3-pointers by Ariza and Chase Budinger helped Houston build a 36-30 lead. The Rockets made eight of their first nine shots in the second quarter -- four of them 3-pointers -- with mostly reserves on the floor.
Houston went 5 for 6 from 3-point range in the second quarter and led 55-49 at the break. Williams delivered 10 of Utah's 18 first-half assists.
The Jazz opened the third quarter with a 16-7 run. Williams scored on a drive, then fed Ronnie Brewer for a dunk to give Utah a 65-62 lead.
The teams gave away 13 combined turnovers in the first 10 minutes of the second half, and Houston retook the lead. Another Rockets turnover led to Ronnie Price's breakaway dunk, and Utah led 76-74 after three quarters.
Williams reached double digits in assists for the ninth time against the Rockets. He had at least 10 assists in a first half for the fourth time this season. ... The Jazz have held eight of their last 11 opponents below 100 points. ... Houston's Garrett Temple scored five points in place of injured backup point guard Kyle Lowry (sprained ankle).