When I start a game, I already know that stuff like collectibles, enemies, the avatar, the GUI or levels will be scenes, because they are distinguishable objects you can work on independently.
Then, I usually create a "play.tscn" scene to start the game and assemble parts here for the first prototype. Having a unique scene at the beginning is OK to quickly prototype something, but it shouldn't last too long. If I feel some parts need to be instanced or separated from others, I extract them as new scenes.
On the other hand, I don't feel it's good to over-separate things, unless you want them to be modular (ex: level layout + enemies layout). Just separate things you need to be separated.
As for how the game runs, I still don't use auto-load nodes yet. Instead, "play.tscn" is my "host" scene under which I load levels, and I never use change_scene()
because all I have to do to load a level is to destroy the last one, and instance the next one. Because, well, scenes are prefabs, and prefabs can be scenes. The only reason I would use auto-load is for nodes that exist for the entire lifetime of the application (including menu, game, everything). Do the way you feel better :)