The Netherlands had taken the lead through Donyell Malen’s goal in the 34th minute, but Croatia equalised shortly after half-time thanks to Andrej Kramarić's goal from the penalty spot.
Croatia then took the lead in the 72nd minute after Mario Pašalić scored from close range, but the Netherlands forced extra time as Noa Lang scored in the sixth minute of second-half stoppage time.
Bruno Petković regained the lead for Croatia with a goal from distance in the 98th minute, before Luka Modrić sealed the win with Croatia's second goal from the penalty spot in the closing minutes.
After the match, Croatian Prime Minister Andrej Plenković congratulated the team and the coach on another brilliant performance.
Croatia, who reached the 2018 World Cup final and finished third last year in Qatar, are one win away from their first major trophy and will play either Italy or Spain, who face off in the second semi-final in Enschede on Thursday.
The Nations League finals are taking place in the Netherlands from June 14-18, starting with the semifinals in Rotterdam on June 14 and Enschede on June 15.
The final match at Stadion Feijenoord and the third-place match at Enschede's FC Twente Stadion will both be held on June 18.