Looking at the ModuleScript Documentation, it says
“If a ModuleScript is uploaded to Roblox and the root module has the name set to MainModule, it can be uploaded as a model and required using require() with the model’s asset ID. Then it can be loaded into your experience, although this logic only works on the server and will error on the client. If other users want to use the module, it must be public.”
In short, if you name a module “MainModule”, upload that module to Roblox, require that
module → local assetModule = require(--assest id of module), you should be able to update that module and have it affect only Server Scripts that are using that module.
As for GUI’s no clue : / Maybe you can do something like making a GUI loader using a module you required from the method above but idk.
Honestly I’d just make a test place where its just testing everything and stuff and when you update that game, update every other place. Annoying yes (ik that’s something you don’t want), but probably the most easy and safe way