Quick idea - how about incremental preloading before showing the app? Image would be cached by the browser.
Alternatively, nodeStyle function could be used. In that case, you'd have to check the current zoom level and depending on it, you should request the image preloading (which is a separate component that you should build). Then set a timeout to check if the image is loaded and the replace the .image with the image preloaded.
Preloader could load images using for instance XHR and you can decide on how many parallel requests you want it to be able to handle.
Another alternative - provide image as data uri in the data - in that case, nodes are already loaded "incrementally", based on the settings and your data backend. In this case no additional loading would happen as data-uri can be set to image.