For example:
firstBlockHash: 00000000000000000000bd6828839c032c75fa996f509ce9f15b09866751081c
secondBlockHash: 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048
sumOfHashes: 00000000839a8e6886ac16b9fff2dd17a1b88595ffe51bcd11712545803c6864 (always divisible by four)
finalBlockHash: 0000000020e6a39a21ab05ae7ffcb745e86e21657ff946f3445c4951600f1a19 (sumOfHashes divided by four)
As you can see, adding some share is not that easy, because you can quickly get bigger number than the target, and then your block will be invalid. Replacing someone else's hash is also not that easy, because your hash not only has to start with some number of zeroes, it also has to produce sums divisible by four in all additions when shares are joined.
To better understand, how hashes are added, imagine a merkle tree with block hashes, but instead of hashing, there is a sum. And for each two branches, the value above is simply their sum divided by four. To replace someone else's hash with your hash, you need to produce lower hash, that is obvious. But: all sums up to the root of the tree also have to be divisible by four. And that means that building the tree from scratch is easy, but kicking one miner to add another one is hard, because all sums have to still be divisible by four.
Edit: as you can calculate, when using division by four, any hash has to be at least less than three times the other hash. If that is not the case, then using that hash directly without adding to the other hash is just more profitable and bring us closer to the target. For example, we have two hashes, firstHash and secondHash:
( firstHash + secondHash ) / 4 < firstHash
firstHash + secondHash < firstHash * 4
secondHash < firstHash * 3
So, if the first hash is 000000001000...000, the second hash has to be lower than 000000003000...000, if it is higher, then the final result will be bigger than the first hash, and then there is no point in adding them. Also, if that second hash is lower than 000000000555...555, then using that second hash alone is more profitable than adding it to the first hash. And that means that hashes will form a tree, where only hashes close to each other will be summed. And because joining them also require last two bits to be zero in each and every sum (up to the root of the tree), it should give enough incentive to start working on the next block and not modify the previous one endlessly.
Edit: If a coin is worth proportionally to the inverse of the hash, then for hash "a" that coin is worth "1/a". Then, the sum of the two coins should be "(1/a)+(1/b)", which can be simplified to "(a+b)/(a*b)" and then inverted. I tried that approach for some hashes and the results sounds promising, for example:
nonce=7c2bac1d, extraNonce=4, hash=000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f, coins=50.00
multiplier=5000, hashCoin=00000001f8a3ab27832f0246a8ed2d31d7d2e3d398c8f2484a88eb7e0fa687f8, minCoins=0.01
multiplier=5000000000, hashOneSatoshi=001e142f625ba9740c7aaf1d06ddcb75acdb761032ef934fbb544a4ed037ee00, minSatoshi=0.00000001
nonce=aa0945e0, extraNonce=0, firstHash=000000004fdffa39618d747f198d716e42d9b0081de468295d8c460316900de3, coins=(hashCoin/firstHash)*minCoins=0.06, satoshis=(hashOneSatoshi/firstHash)*minSatoshi=0.06317870
nonce=f17ed232, extraNonce=0, secondHash=00000000305f4d0a1a63c3fc231f7bcad88909ac6d4146f1b0453a2144316a15, coins=(hashCoin/secondHash)*minCoins=0.10, satoshis=(hashOneSatoshi/secondHash)*minSatoshi=0.10432409
a=000000004fdffa39618d747f198d716e42d9b0081de468295d8c460316900de3, satoshis=0.06317870
b=00000000305f4d0a1a63c3fc231f7bcad88909ac6d4146f1b0453a2144316a15, satoshis=0.10432409
a*b=00000000000000000f17bb1222d4a2194aa857b118a0dc364ffeb1d87361ad982afc8b6cc7fc5baf318f4bb7df2dd5e24916c5fa97f7d32853fad31e7404219f
a+b=00000000803f47437bf1387b3caced391b62b9b48b25af1b0dd180245ac177f8
result=(a*b)/(a+b)=000000001e209156ca1b80d9d174c491280ee9ad1bf9aa533c392cdbf07c5d84, satoshis=(hashOneSatoshi/result)*minSatoshi=0.16750279
0.06317870+0.10432409=0.16750279 (it works!)
I noticed dividing by four does not work as well, because the result is 00000000200fd1d0defc4e1ecf2b3b4e46d8ae6d22c96bc6c374600916b05dfe in this case. That means 0.15739584 reward instead of 0.16750279, so 0.01010695 coins lost when joining shares! It has its advantages, for example the calculations are simpler and there is an incentive for having as many hashes as possible, but I think any hashes should be joined as long as previous block hash and difficulty matches and each header passes standard checks.
So, in this way any shares could be joined and after testing it with some values it seems that the order of the operations does not matter. To sum up, I think we could start by including 5,000 hashes. It means 80 bytes per hash, so up to around 400 kB per block. Starting with 0.01 minimum reward seems to be a good option, it can be decreased with every halving, and after the last one, that limit should be skipped. It is still far from being complete and still does not scale up to millions of miners, but I think it is a good start point. Also, as old hashes will be deeper and deeper in the chain, that rewards should be decreased and removed after reaching zero satoshis. Currently, we have 6.25 block reward, so in that case the minimum payout would be 0.00125000.