Consider the following snippet which is adapted from the Tor source code:
/* This can be a malloc wrapper with minimal initialization. */
/* This struct is never defined. */
typedef struct undef undef_t;
other_t *other = make_other();
Since it isn't specified that the type must not be incomplete, the rule1 simply applies to all types, complete or not.
Additionaly all pointers to structs are guaranteed to have the same alignment requirements2.
Therefore if the pointer is correctly aligned, the conversion to undef_t and back to other_t is defined.
This is actually being done all the time. The type
void is an incomplete type, and conversion to, and from it, is defined.
1 (Quoted from: ISO:IEC 9899:201X 184.108.40.206 Pointers 7)
A pointer to an object type may be converted to a pointer to a different object type. If the resulting pointer is not correctly aligned 68) for the referenced type, the behavior is undefined. Otherwise, when converted back again, the result shall compare equal to the original pointer.
2 (Quoted from: ISO:IEC 9899:201X 6.2.5 Types 28)
All pointers to structure types shall have the same representation and alignment requirements as each other.