Code newer than 0.13.0 uses feeler connections and won't talk to more than one node on the old protocol.
That just means everyone will have to be using the newer setup. Problem solved.
Code newer than 0.13.0 assumes BIP66, BIP65, CSV and SegWit have already been activated.
I think your characterization is off but either way, what problem does this present? I had no problems when testing.
This is why it is asking in chainparams.cpp for the height and hash where activation occurs.
You don't have to provide the "hash", that's more of a subsequent note. But it does need to know which height so that it knows at which block to begin accounting for the new rules. If you don't have the height then how would any wallet know when to apply the new rules?