Why does the I2C interface use the open-collector/open-drain?
Open drain allows there to be multiple masters on the same bus. If two masters try to transmit at the same time with push-pull drivers, they can damage each other, and even if they don't it's hard to tell which master will win. Open drain acts as a "wired AND", which makes it easy to share the line and arbitrate collisions. CAN does something similar, although the physical layer is differential instead of single-ended.

In I2C in particular, open drain allows the receiver to stretch the clock by holding it low when the receiver needs more time to process the data. Whether this is a bug or a feature is a matter of opinion.