First Are you using bluebuild? There a many forks of custom image starting point. Secondly if your usijg bluebuild template. All files that specify packages and what modules should be on the recipes folder. Using recipe.yml is a very good starting point as you can specify how to install a package and what package manger to use. IE brew, rpm-ostree
You can also add modles which you can take the bluebuild template and add a modules folder in the main tree. Bluebuild has premade modules, aswell as documentation to make a cutom module.
And to answer your first question directly use recipe.yml in the recipes folder to specify other .yml files to be used in building. Secondly the best you can get is githubs builder in the actions tab, however some errors are BLOODY USELESS BECAUSE THERE WRONG. I have had a few times where it complained about not having a - at the top of a module. Even though there was one there, i eventually solved it after rewriting a part of my .yml i belive it was a formating issue
I recently switched to bazzite. What i ended up doing was using bluebuild and making my own github repo. Which takes the newest version of bazzite upstream and strips out flatpaks i dont want or certain packages. And installs some i want. The documentation could use some work but its a great concept
And my repo if you need insperation and or help with configuring bluebuild feel free to ask!
Im still trying to figure out how to make it automatically take distrobox assemble distrobox.ini and setup my distroboxes
And to answer your question with bluebuild you can take bazzite-dx and set that as your image in recipe.yml and then specify what packages you want added via brew, flatpak, or rpm-ostree or removed