C permits assigning one struct to another of the same type, and the semantics of doing so are defined in terms of the struct representation, as opposed to a member-by-member copy. That a struct representation encompasses the representation of an array does not mean that assigning the value of a struct that contains an array to another struct violates C's prohibition against assigning one array to another.
C furthermore guarantees that the address of the first member of a struct is the same as the address of the struct itself, and it permits object pointers to be cast among different pointer types. In that case, the result of such a conversion is not guaranteed to be correctly aligned, and if it is not then dereferencing that result produces undefined behavior.
On the other hand, the compiler is free to include trailing padding in struct representations. Oftentimes that is done for alignment purposes. If your compiler does that for your struct -- which it likely will do if it applies a 64-bit or greater alignment requirement to it -- then your assignment produces undefined behavior. In that case, if it appears to work then that's because you got lucky.
If, however, it turns out that neither of the above sources of undefined behavior applies, then it is indeed reasonable to expect the code to work as expected. Inasmuch as it is tricky to predict whether that will be the case, however, you would be well advised to avoid code like this.
A better question might be why C disallows array copying. There are likely several reasons, but I think the deepest one is simply for consistency. In almost all contexts, when an an expression or sub-expression evaluates to an array, that value decays to a pointer to the first array element. That includes the subexpressions constituting the operands to an = operator. So in normal C expressions, an array assignment would actually be a pointer assignment, and one that did not have the intended semantics. One would have had to carefully craft an appropriate special case for that situation in order to allow for array assignment.