Why does UE4 use uint32 to represent a bool?

It doesn’t, it just affects how they’re stored. How you pack them in your bit stream is unrelated, you could pack a boolean (8-bit) as 1-bit on the network stream.