The Lazio midfielder's first effort was cancelled out by Mathias Normann two minutes from time to send the game to extra-time. But Milinkovic-Savic's incredibly deft chip from a narrow angle proved a worthy winner.
Republic of Ireland failed to capitalise on Slovakia's own problems with coronavirus absentees as Stephen Kenny's men were left to rue a host of huge chances after a 0-0 draw in Bratislava.
Allan Browne and Tottenham Hotspur's Matt Doherty then failed to score from the spot and the Slovaks made no mistakes to win 4-2 in the shootout.
"It's a hard one to take at the minute and it is heartbreaking," Ireland captain Shane Duffy said.
Northern Ireland upset the odds by coming from behind to beat Bosnia.
Rade Krunic opened the scoring early on for the hosts, but Niall McGinn's equaliser gave Ian Baraclough's men something to hold on to.
And they kept their heads to win the shootout 4-3 as Haris Hajradinovic and Edin Visca missed for Bosnia.
"We didn't start anywhere near the way we wanted to, but when we got to grips with it and everything fell into place," said Northern Ireland captain Steven Davis, who became his country's most-capped player on his 120th appearance.
Gylfi Sigurdsson's double ensured Iceland beat Romania 2-1 to set up a final against Hungary, which was a 3-1 winner in Bulgaria.
Kosovo's dreams of reaching a first ever major tournament came to end as it was beaten 2-1 by North Macedonia.
Only admitted into UEFA in 2016, Kosovan hopes were high of making history after it performed strongly in a qualifying group containing England and the Czech Republic.
But instead it is the Macedonian side has the chance to reach a first major international tournament when it faces Georgia, which beat Belarus 1-0, in the Path D final next month.