If I understand the proposal correctly, what you want is to avoid dealing with generic properties whose specialized type happens to be "something that is not there". I can understand the need, but maybe you misunderstand what's the point of Never and Void.
A minimal example would be the following:
/// You're requesting something like this
struct Product<A, B> {
var a: A
var b: B
}
typealias MyProduct = Product<Int, Never>
let x = MyProduct(a: 42) // `b` is omitted because `Never`.
_ = x.a // ok
_ = x.b // traps
Putting aside the fact that a type system feature that can easily produce trapping code is probably a bad idea in itself, what you're expressing with MyProduct(a: 42) is "create an instance of MyProduct whose a value is 42 and b value is a default one", in fact it has the exact same syntax as a regular initializer with a default value associated to a parameter.
What you want is a default value, not "no value": but the initializer must be able to "pluck the default value out of thin air" and this is exactly the purpose of Void.Void has single instance () that can always be produced no matter what, out of thin air.
The case is different with an enum:
enum Sum<A, B> {
case a(A)
case b(B)
}
typealias MySum = Sum<Int, Never>
let x = MySum.b(???) /// cannot be produced, it makes no sense
In fact, the post you mentioned from @Joe_Groff talks about throws, which is modeled with a sum type.
A function like
func foo() throws -> Int
is isomorphic to
func foo() -> Result<Int, Error>
in the same way a function like
func bar() -> Int
is isomorphic to
func bar() -> Result<Int, Never>
While throws is great and I use it all the time, I think it's still important to understand the underlying type algebra.