Thanks for your ideas! The buffering of writes is an interesting idea but I do need immediate writes for data safety reasons.
The _search method you described doesn't work: if the search returns the up-to-date document, a subsequent search may be routed to another replica shard which may still hold and return the stale version of the document. (I tested this.)
As for wait_for, do you know for certain that wait_for actually waits for all shards to refresh, or only the replicas that store that particular document?