Message keys are not user contributed content, that I am aware of, so only site wide administrators can modify them. Right now message keys can contain HTML as well as variable placeholders that will be filled in when the key is translated.
I thought about a Tcl api, but I think this idea meets the requirements as well as being simpler and requiring no new code to implement. It just requires documenting the set of resources that we want to be reusable. Of course, you could also define custom resources and reuse them per package also. (That is, if you have an icon that only makes sense in one package, it should still be a message key.) Icons should be localized also, if they include text, or even an image that only makes sense in certain languages. Hmm I just thought of that last bit, that reinforces the idea that they are message keys. Even if we don't implement this theme idea, I think it makes sense to use message keys for this kind of thing.