Omitting support for something that's technically possible is a dumb approach to fighting this (actually it's exactly equivalent to ignoring the problem). Instead the focus should be on making it less economical for protocol developers to violate layering and embed layer 3 addresses at layer 5, which is the reason "every protocol" needs special casing in the first place.
Accomplishing that could happen in various ways, e.g. promoting SCTP (which allows establishing new channels over the same initial connection), or introduction of an abstract naming service that would preserve layering (I'd be very surprised if something like this didn't already exist).