Wade made 21 of 23 free throws and Miami improved to 4-1 on a six-game trip, which concludes Monday against the Lakers.
The Heat is also 4-2 since Ron Rothstein took over as interim coach for Pat Riley.
The game took nearly three hours, as the teams shot a combined 99 free throws. The Heat was far better at the line, shooting 42 for 45 while handing the Jazz its first three-game losing streak of the season.
The Heat led by 22 in the third quarter and let Utah get to within seven points early in the fourth before Miami regrouped and led comfortably the rest of the way.
O'Neal, who returned to practice last week after being out since November because of knee surgery, said before the game he wasn't sure how much longer he would be out. The way the Heat is playing, he can take his time.
The Heat faltered only once and quickly corrected it after Utah cut a 22-point margin to single digits early in the fourth quarter. The Jazz trailed, 97-84, at the end of the third, then opened the fourth with an 8-2 run.
Boozer made consecutive jumpers to cut the lead to 99-92, and the Heat called time out. Miami then scored the next 10 points.
Wade started the run with two free throws, Udonis Haslem made two more free throws and Kapono made two three-pointers to put the Heat back in command.
During the run, the Heat got a scare with about eight minutes left when Wade took a shoulder to the face from Harpring as he was going back to play defense. Wade dropped to the court and stayed there for a few minutes as the Heat called time out.
After toweling his face off, Wade went back out to the court and got a small cheer from the Utah fans.
The only time they cheered again was when Coach Jerry Sloan got a late technical when Wade went to the line -- again.