A particlar non-bogus value for void is needed, otherwise e.g. "void|int foo();" does not work.
That ought not work either. That's a meaningless return type since there's no out-of-band way to know if the function chose to return a value or not. If returning zero is the alternative to the other value, then write "int(0..0)|<something>", not "void|<something>". A warning for such a return type is in order. (I can confess I've written return types like that too long ago. It was a mistake.)
I don't see any point with letting void become just an alias for int(0..0). Hopefully "zero" will be introduced for that purpose.
I've already shown that there is use "wasting" this effort, so your argument does not hold.
You've only shown it if one chooses to accept your argument.