Background: A cryptocurrency, such as Bitcoin, have a global order of all transactions that is guaranteed to be agreed by all participating nodes. With Bitcoin, this is ensured by making the longest chain win, and that creating a long chain requires performing a lot of computations (so it is not trivial to arbitrarily create a longer chain).
A problem comes when there is a long-lasting network partition. Each partition will eventually use its own local order, which is different than every other partition. Later, when the networks merge, a single global order will be enforced based on the network that had the longest chain.
This new global order can be different-enough for the other smaller networks that effectively some of their transactions will disappear if they're invalid as per the global order. E.g. coins mined in a small network partition that required a low difficulty (e.g. finding hashes a small number of zeros) will be discarded as invalid according to the perspective of the larger network which requires solving more difficult problems (e.g. finding hashes with more zeros).
This is a problem, as some payments become zero. Imagine being a business owner that sold and delivered goods in a small network partition in return to some BTC, only to realise that the payment has disappeared from the global transactions order once the partitions got merged back into the main network. Effectively, we will have the equivalent effect of having goods stolen (or given for free).
Question: How to design a cryptocurrency that guarantees that such network merges will never cause any disagreement in payments? Are there any fundamental principles that, if satisfied, we ensure consist money balances even after long-term network partitioning?