Substitute Romelu Lukaku hit a post for Belgium in the second half, but they needed to win to progress, while the point was enough for Croatia, who finished second in Group F behind winners Morocco.
Belgium, number two in FIFA's world rankings, had failed to impress in their opening two group games - a 1-0 win against Canada and a 2-0 defeat to Morocco - and their latest setback could signal the end of an era for Roberto Martinez's 'golden generation'.
Eden Hazard was dropped for his country's do-or-die encounter and his introduction as a late replacement failed to lift his side.
Ivan Perisic went close to giving Croatia a dream start when he collected Luka Modric's pass and rifled a shot inches wide inside the opening 10 seconds.
Belgium appeared nervous under the pressure, but Kevin De Bruyne drove them forward in the 13th minute and laid one on a plate for Dries Mertens, who blazed over the crossbar.
Martinez's side were reprieved by the video assistant referee in the 15th minute after referee Anthony Taylor had awarded Croatia a penalty for Yannick Carrasco's challenge on Andrej Kramaric.
The penalty decision was not in doubt, but VAR intervened and asked Taylor to check the pitch-side monitor for an earlier offside and the English official then ruled out the spot-kick.
Belgium began to dominate possession but failed to carve out another shot on target in a goalless first half, while Croatia threatened again through Josip Juranovic's first-time effort in time added on before the interval.
Half-time substitute Lukaku's header soon after the restart was easily gathered by Croatia goalkeeper Dominik Livakovic as Belgium looked to inject some urgency into the game.
But Belgium goalkeeper Thibaut Courtois was forced into successive saves from Marcelo Brozovic and Luka Modric.
Lukaku then squandered Belgium's best chance. Another superb De Bruyne pass set up Carrasco and when his effort was blocked, the striker fired the rebound against a post.
There was more despair for Lukaku when he headed over from in front of an open goal, but De Bruyne had just failed to keep the ball in play before supplying another pin-point cross.
Croatia had soaked up considerable pressure when Modric forced Courtois into another save, before Belgium pressed for that elusive late goal.
Lukaku had another clear chance to send Belgium through in the last minute, but his bundled effort from Thorgan Hazard's cross was saved on the line by Livakovic.
The Chelsea forward was denied again by Croatia defender Josko Gvardiol's brilliant last-ditch tackle in the closing moments.