Would it be possible to change the p2p protocol used by the bitcoin-clients without a hard-fork? I had a look at https://en.bitcoin.it/wiki/Protocol_documentation where the p2p protocol is documented. Although it states incompleteness I thought it is a good starting point to understand the protocol.
To my initial understanding the protocol is based on c-structs that are directly sent over the wire. This makes implementations in other languages more complex.

Would it be possible to introduce a new protocol based on a well known communication method (for example JSON) and make a smooth transition between the protocols? For example with bridge nodes, which are using two protocols in a transition period?
Yes, the p2p protocol itself is not consensus-critical. Of course there can not be two completely seperate networks, so you will have to take care to create bridges between the two. But other than that you could make a sneakernet p2p network where people exchange USB sticks if you like.