I think then any solution that allows miners to set their maximum block size is completely useless, either by voting in blocks like BIP100, or by average transaction fees like BIP upal, or average block size. Miners will always try to maximize the possible block size since they can always soft minimize later.
There is no "voting". I know that people seem to like to call it "voting", but that's not actually what is happening.
A consensus protocol like bitcoin is ALWAYS 100% of the participants. That's what consensus means.
If a fork triggers at 5% of the hash power, you'll still have 100% consensus of the participants. You'll just have it with a very insecure system since you won't have enough hash power to keep your blockchain secure against an attack.
This is the reason that 75% of the blocks (not 75% of the miners, and not 75% of the nodes) was chosen. The miners aren't "voting". They are simply stating that they are willing to use their hash power to secure the blockchain. Once it is clear that there is enough hash power behind an idea, it becomes "safe" to split off. The remaining hash power is welcome to continue to support the old blockchain if they want to, but they'll be supporting a relatively insecure system.
Pretty much every altcoin is just a fork of bitcoin that just happens to trigger at the genesis block. This means that bitcoin already has less than 100% of the "vote" of all crypto-currency participants. What percentage does it have? Does it matter? All that matters is that it has enough hash power to remain secure. If a hard fork is implemented and less than 100% of the current miners choose to participate, then there will be two bitcoin systems. One of them will be more secure than the other. How much more secure will depend on the exact distribution of hash power between them.
They might both choose to call themselves "bitcoin" (which will lead to some confusion with the users) or one of them may choose to change their name to clear up some of that confusion. Perhaps the old protocol will change to "LegacyBitcoin" or perhaps the new protocol will change to "Bitcoin2016". That's really up to the users to decide.
There should be a way to enforce transactions to be in the mempool for them to be valid in blocks. Is that posible?
No. That is not possible. There is no way to know that every possible node has every possible transaction in their mempool.