Milan are top of the table with 18 points after seven matches, three points ahead of Inter Milan who play Salernitana later on Saturday. Lazio are 14th with seven points.
Pulisic’s goal was his third for Milan since arriving from Chelsea in the summer, but his first in more than a month.
Milan’s pressure had been building and the hosts finally made the breakthrough on the hour mark. Tijjani Reijnders slipped the ball through to Rafael Leão and he crossed for Pulisic to fire in on the half-volley with the inside of his left boot.
Pulisic was given another standing ovation by the San Siro crowd when he was substituted late on.
The Lazio goalkeeper had pulled off an equally impressive stop at the end of the first half to prevent Olivier Giroud from marking his 37th birthday with a goal. Reijnders backheeled the rebound onto the post.
Okafor sealed the match two minutes from time with a simple tap-in after some great work by Leão.
“After the break, we were more compact and certainly more energetic, hungrier and more determined,” Milan coach Stefano Pioli told DAZN.
“That is a great sign when playing every three days and it was a fully deserved victory.”
Lazio thought they had grabbed a consolation goal in the dying moments, as Pedro unleashed a beautiful curler into the top corner, only for it to be disallowed for an earlier offside.
Milan suffered a potential injury blow as midfielder Ruben Loftus-Cheek limped off in the first half.
“It would be a shame if we lost Ruben, he felt a twinge near the groin area,” Pioli said, adding that he hoped it was nothing serious.
“Unfortunately, injuries tend to come when players are in good shape.”
Reuters and the Associated Press contributed to this report.