England were themselves facing the drop when Croatia's Andrej Kramaric scored after 57 minutes but substitute Lingard and Kane netted in the 77th and 85th minutes at a vociferous Wembley to turn the group on its head.
Gareth Southgate’s side, who were knocked out in the semi-finals of the World Cup by Croatia in July, had dominated for large periods but fell behind when Kramaric twisted and turned before firing in via a deflection off Eric Dier.
Yet Lingard poked home and Kane converted Ben Chilwell’s free kick to ensure England finished top of a group where all three teams -- including Spain who started the day top but finished second -- could have qualified.
"Today was another big occasion with lots of pressure,” Southgate told reporters.
"But I thought we coped with it very well and in the first half we played so well. We had good chances and should have been ahead in the game. But then we had to show another side: our resilience and character."
England made eight changes from the side that beat the United States in a friendly on Thursday with no place in the starting lineup for Lingard, Trent Alexander-Arnold and Callum Wilson.
As England started to dominate, a fine Kane ball sent Raheem Sterling free, only for the Manchester City winger to shoot directly at Croatia keeper Lovre Kalinic while Kane spooned the resulting corner over the crossbar.
There was very vocal contingent of Croatia fans in the 78,000-strong crowd, but they were lucky not to see their side concede as Kane was brilliantly denied first by defender Tin Jedvaj and then Kalinic with the visitors struggling to contain England’s pacy attack.
England introduced Dele Alli, Jadon Sancho and Lingard after the goal and their energy proved decisive with Lingard, poking home in the 77th minute.
Both sides looked dangerous in a frantic, full-blooded final 15 minutes but with Wembley roaring them on, it was man-of-the-match Kane who was on hand to slide in Chilwell’s free kick and seal England’s progress.