When you refer to removing a package "permanently", that is a fallacy.
You cannot predict whether you may want to reintroduce a package some day.
Even for a foo-static package there may be a reason why to build such a
package again. Blocking a package name completely is not nice. It may be a
3rd party repo to reintroduce that package with a higher version or bumped
Epoch. Or a local admin, who wants to keep it. Non-versioned Obsoletes
make it more difficult to reintroduce the package, since you would need to
get rid of the Obsoletes tags from installed packages *and* from the repo
metadata first.
Properly versioned Obsoletes also remove a package from the dist forever,
provided that the package is not reintroduced in the future. Using macros
is a trade-off, which also obsoletes any updates or upgrades the obsolete
package may have had for older dist releases. Non-versioned Obsoletes is
the big hammer and a sloppy solution. That a packager can violate the
dist upgrade path is a general problem and not specific to versioned
Obsoletes tags.