very tap dependent. Some taps have options to dynamically load streams based on config files, or dynamic things. like
https://github.com/ets/tap-spreadsheets-anywhere
A lot of taps written by the singer-sdk maybe the one you're referring to? Most are based on fairly static api's so it's much easier and faster to just throw a schema file and stream configuration in the tap and most of the time that's most practical as most api's don't have discovery mechanisms.
The "core" question here is probably getting at why can't everything be dynamic? Well it can and people have tried
https://github.com/Widen/tap-rest-api-msdk is a good example. Sometimes this works for some usecases well, in complicated use cases this gets hard. For this type of tap you push a lot of "code" to configuration which some folks want