Altuve had four hits, an RBI and two steals, including one of home, in Houston's 4-3 win in 11 innings over Detroit that snapped the Tigers' seven-game winning streak.
Castro launched a pitch from Blaine Hardy (0-1) into the seats in right field with one out in the 11th to give Houston the victory.
Altuve had his MLB-leading 33rd multihit game of the season. He leads baseball with 111 hits and the AL with 32 stolen bases.
"I'm somewhat speechless," Houston manager Bo Porter said when asked about Altuve's night. "It's impressive to have the kind of impact he's having on the baseball game each and every time he takes the field."
Altuve scored a run in the first and tied it up with a RBI double in the fifth. He stole home later that inning to give Houston a 3-2 lead.
"He can do it all," Castro said. "Stole home, laid down an infield single. He's fun to watch and he's one of those guys in your lineup (where) anytime he's at the plate you know he's got a great chance of getting on and getting in scoring position on his own. It's huge to have at the top of the lineup."
Altuve left before reporters were allowed in the clubhouse after the game and wasn't available for comment.
First baseman Jon Singleton let a foul ball hit by Suarez drop for an error with no outs in the eighth inning. Suarez then drew a walk and reached second on a groundout by Torii Hunter for the second out.
Nick Castellanos had a solo homer to give the Tigers the lead in the fourth inning and Ian Kinsler had three hits for his sixth straight multi-hit game, a career-high. He's second to Altuve with 32 multi-hit games this season.
It was the first trip to Houston as a manager for Detroit's Brad Ausmus, whose 10 seasons catching for the Astros included the franchise's only World Series appearance in 2005.
J.D. Martinez, who spent three seasons with the Astros before they released him in March, had two hits to snap his 14-game hitting streak a day after going 0 for 4.
L.J. Hoes singled to start Houston's fifth and took second on a throwing error by Justin Verlander on a pickoff attempt. Hoes reached third on a sacrifice bunt by Villar. Then Altuve went to work. His 24th double of the season scored Hoes to tie it 2-2.
George Springer singled and Altuve moved to third before Verlander tried to pickoff Springer at first with two outs.
Altuve broke on the throw and stole home, sliding under the attempted tag by Alex Avila to put the Astros on top 3-2.
Martinez singled to start the second inning and advanced to second on a passed ball. He scored on a single by Avila with two outs to tie it at 1-1. But Avila was thrown out trying to stretch the hit into a double to end the inning.
Altuve led off the game with a single and stole second base. He advanced to third on a wild pitch with one out and scored on the same play on a throwing error by Avila to put Houston up 1-0.
Astros starter Brad Peacock allowed seven hits and two runs -- one earned -- in 6 2/3 innings after missing his last start while recovering from food poisoning.
Verlander allowed six hits with three runs and eight strikeouts in six innings to remain winless since May 30.
He lamented allowing Altuve to steal two bases while he was on the mound.
"Being able to take that base in the (first) led to a run," he said. "Being able to take the extra base on the pickoff to first was another run. He's one of those guys you have to keep off the base paths, and that is not easily done."
Houston left-hander Dallas Keuchel has been scratched from Saturday's start because of inflammation in his throwing wrist. Brett Oberholtzer will start in his place against Max Scherzer. ... The Astros signed fourth-round draft pick RHP Daniel Mengden on Friday. ... Houston center fielder Dexter Fowler was scratched before the game because of tightness in his back. Alex Presley was moved from left field to center to take his place and Hoes was inserted in the lineup in left field.