1. It allows you to write code that may be called by other languages.
2. It allows you to write code that may be executed accross machines (via DCOM).
3. It forces me to think a bit about the design of my component's interfaces upfront. Since I know what a hassle it is to change it later, I spend the extra time upfront to avoid it.