alleviate requirement to restart long-running processes
The essence about daemons or other long-running processes is that they will eventually run on out-dated code, and even sooner so run on out-dated configuration. The latter affects the plugin's they have loaded, which also makes up portion of the code that may update.
Usually, daemons and their code are quite stable, as they are usually just distributing calls to plugins which carry the actual implementation. Therefore, having an on-demand framework for reloading configuration and plugins as they change, are added or removed, seems like a viable option to significantly increase the usefulness of such daemons.
As with every code, plugin-dependencies could always make it prohibitive to reload them, which is why that feature should be optional. However, it should be able to add new plugins, or remove existing one, while the daemon is running.
Possible Solutions
A backround thread could be attached to one or more context instances, and monitor changes to the configuration directories and loaded files they handle.
When a change is noticed, this information is passed to a delegate to handle the matter. That way, others get a chance to react to changes in specific ways, such as visual notifications of what happened.
To aid discovering such a thread, one might consider placing it in the application context - however, this is optional and should lie in the responsibility of the caller.
It should be considered to update Application.new() with the option to automatically set something like it up.
Also note that the context may change over time, and the background thread should have a way to learn about new contexts (Either by traversing the entire ContextStack, or by learning about it's set of Contexts by the delegate)