I don’t know where to start on this. The web today is a highly async environment. Libs like ReactiveX and languages like ELM have emerged to deal with this reality. Yet this web works pretty darn well.
It appears to me that your major concern is that cross shard communication is async? I really don’t see the problem here. It allows an enormously larger number of total transactions than is possible today, under one consistent system. As with all systems there are costs and benefits. In this case passing a call from one shard to another to move funds on another shard and then pointing the receipt to a callback seems pretty simple to me.