On a second thought, I believe it is not really a hack. Notations are sometimes used for providing old lemma names for compatibility, after lemmas have been renamed. (For example, the module ConstructiveEpsilon.v of stdlib provides old lemma names as (only parsing) notations (hidden in the coqdoc)). So if you just want to rename a lemma and keep the old names for compatibility, I believe it is a good idea to make the old names a notation with the deprecated attribute.

This is indeed the proper way to do this when you want to rename a lemma (it’s even documented in the reference manual now). If you want to remove a lemma, it’s true that it does not work as well, and adding support for the deprecated attribute on any definition or lemma would be nice as well (and shouldn’t be so hard).