Four straight walks started the Mariners' big burst as they overcame a 2-0 deficit.
Iwakuma (1-0) made his first appearance after starting the season on the disabled list because of a sprained middle finger.
Iwakuma allowed four runs and six hits in 6 2-3 innings. Fernando Rodney escaped a bases-loaded jam in the eighth and finished for his seventh save.
Dallas Keuchel (2-2) left after walking the bases loaded with no outs in the seventh.
Smoak, Robinson Cano, Stefen Romero and Michael Saunders each had two hits in Seattle's highest-scoring game since a 10-3 win over the Angels on March 31.
Jonathan Villar and Chris Carter each homered in Houston's four-run seventh as the Astros dropped to 10-20. Carter also tripled and Marwin Gonzalez had three hits.
After Keuchel was pulled, reliever Jose Cisnero walked Mike Zunino to force home the tying run. Saunders then hit a two-run double, and Romero and Cano each added RBI singles. Kyle Seager doubled home a run before Smoak's two-run homer off Raul Valdes.
Seattle manager Lloyd McClendon was ejected in the seventh after the walk that loaded the bases. Catcher Jason Castro went to the mound to talk to Keuchel, and when he began walking back to the plate, McClendon was tossed for arguing by umpire James Hoye.
Carter hit an RBI triple to the center-field hill in the eighth and scored on Alex Presley's single, making it 9-8. After Yoervis Medina walked the bases loaded, Rodney induced Jose Altuve to fly out.
The Mariners and Astros close their series on Sunday. First pitch is slated for 11:10am (PT) in Houston.