I2C has some features that improve on other communication busses, and to implement that, it had to switch to a different style of connection. If two devices force a line to two different states, you can short the line and possibly damage something.
UARTs/Serial and SPI are uni-directional communication. By that I mean each line is dedicated in a single direction. You have a transmitting and a receiving pin. Since each pin is dedicated to that one direction, it can be controlled by one side without worry. Which leads to the second lacking trait in them, is that they are essentially single master. You have to have a dedicated bus for each UART, and for most practical purposes, each SPI master. Finally, there is no way to resolve conflicts on the bus, even if there is no damage if two devices try to talk on it.
I2C does not have these failings. It's open collector setup allows a single communication line to work in both directions, with multiple slaves. It can have multiple masters, since there is a built in way to check the line. A slave can hold the clock down (clock stretching) if it needs more time. A superset of I2C called SMBus allows even more features, like arbitrarily allowing a slave to signal or alarm.
In short I2C needs pull-ups as a design choice to allow multiple features missing from other communication buses, mainly to allow more communication on a single pair of wires