Det var efter 38 minuter som Sergino Dest nickade ner bollen till Christian Pulisic, 24, som sköt in ledningsmålet och samtidigt brakade in i målvakten Alireza Beiranvand.
Pulisic fick uppenbart ont, men fortsatte till en början att spela. I halvtid var han ändå tvungen att byta till förmån för Leeds-spelaren Brendan Aaronson. Han fick först behandling av läkarna på plats, men fördes senare till sjukhus för undersökning av en bukskada.
I slutet av första halvlek hade också Timothy Weah bollen i mål, men det underkändes för offside.
Iran var piggare i andra halvlek och tryckte på för en kvittering, men den kom aldrig. Alldeles i slutet ville Iran ha straff, men domaren friade.
– Iran kom ut som ett nytt lag efter halvtid och har dominerat, sade SVT Sports expert Markus Johannesson.
Därmed får landet fortsätta hoppas på ett första avancemang från ett VM-gruppspel. USA ställs mot Nederländerna i åttondelsfinal. Den matchen spelas på lördag.