But here is the thing, the web games I play are transferred in one go.
I think there is something that we are not understanding in the same way.
That loading bar you talk about is NOT from Itch. Unless you're talking about the app, but I understand we're talking about playing on the web through a browser.
Note that NOT all games have a bar and you can do your own experiment, upload a game with an index.html and a couple of large files and you will see that there is no loading bar from Itch.
If Itch really passed the .ZIP to the browser, then it makes no sense to have a limit, because the server would always pass only 1 file, it doesn't matter if you have 100 or 100,000 files inside the zip.
Itch has no way of knowing if a game is optimized or not, if you upload 2000 files, Itch must understand that it will have to deal with 2000 requests and that's why it won't let you upload that.
Itch does not pass the .zip that you upload to the browser, but rather it must decompress and expose the files one by one to the server. If it didn't do that, you would have to upload the index.html outside the .zip
If my game has 2000 sprite files, and I upload that to Itch, Itch has to deal with 2000 loose files.
I take those 2000 files and package them (me as a programmer, NOT itch), and then I tell my engine to access those resources from a single file, for example a .PAK. Now, Itch only sees 1 file and will let it upload and run without any problem.
In both cases, the resources used at the game level are 2000. But in one, there are 2000 individual files, in the other, it is a single file. But you have to do that on your own, Itch does NOT do it.