Link-time optimization means that you're probably not going to take that much of a performance hit.
But yes, opaque structs do enforce that it will be treated as a plain pointer, and the compiler (usually) cannot treat it as an aggregate of variables.