Mostly because of the underlying workings of said settings.
Possibly interaction with other settings. Also the different setting could mean a different initialisation value, requiring a full restart.
I can give you a simple example that is easy to understand: translations. Some applications can do it on the fly, others require a restart. A common reason for this is that the language stuff is in a dedicated dll with each language on a different dll. Since dlls cannot (or may not) be unloaded it is not (or may not) possible to ditch the resources of the original language.