You generally don't push into people's repositories in which they work, that would be troublesome. Bare repositories are for pushing into, while non-bare repos tend to have a developer in front of them and he's responsible for managing it and pulling into it from places.
So: A model without central repository would contain two non-bare repos (each having the other as remote; consider the remote list as a repository's "address book").
During work, you would periodically pull changes from each other, but that would make some problems:
- some additional communication is needed (when to pull, which branches to pull)?
- you'd need to make sure that both repos are available (so that developer A wouldn't need to wait for developer B to turn on his PC whenever he needs to pull something)
A bare, central repository helps with that:
- It's supposed to be always available
- You decide which branches are in a "push-ready" state, what to share, what to keep to yourself
- It serves as a synchronization point: there's always the current version so in case of divergence it's always clear who's supposed to merge.