I feel like a bit of a broken record revisiting all these old posts from when NULL was the only non-valued state, that was trying to do double duty as both "soft failure" and "opt out".
But this is yet another solved case. Nowadays NULL doesn't vaporize in REDUCE (it's an error), but VOID does vanish. And you can convert NULL to void with MAYBE if that's what you want to do.
Ever since introducing this distinction, I haven't really seen problems with vaporizing voids...and the NULL erroring has caught many issues. The abstract potential for problems with void opting out of REDUCE is there, but I haven't seen any problems. It feels especially solid now that these behaviors are specific to constructs like REDUCE, and the evaluator doesn't vaporize VOID...just the much rarer NIHIL.