> Everything in C is just array of bytes, some would argue uint32_t is just array of 4 bytes
That isn't how the C language is defined. The alignment rules may differ between those two types. Consider also the need for the union trick to portably implement type-punning in C. Also, the C standard permits for CHAR_BIT to equal 32, so in C's understanding of a 'byte', the uint32_t type might in principle correspond to just a single byte, in some exotic (but C compliant) platform.
Well maybe more than just a convention, but there is nothing preventing you from setting the last byte to whatever you want.