HI
There isn't one central place where the repository structure is created for each Site, as that code would have to know in advance what pages and components you're using on that site.
Instead, each time a query is made for repository data, the repo-based web script checks the return value from getContainer() and if it's null then it calls createContainer(). You can see this for the Document Library in action.lib.js, upload.post.js and parse-args.lib.js. In reality it's the latter that will get called first, as the "Recently Modified Documents" dashlet calls it.
What you'd need to do is override (or modify) those web scripts so that you then create your custom folder structure underneath the newly-created container - i.e. call createFolder() a few times, or use a copy() call. Note that you shouldn't replace the createContainer() call, as the Site Service performs a couple of other housekeeping tasks, such as adding an aspect and setting the tag scope.
Thanks,
Mike