- may not have time ("my boss told me to ship this yesterday")
- may not know ("I couldn't afford a copy of the standard, and I got my documentation by browsing web pages")
- may not understand ("WTF is this extra thing I have to worry about?")
In short, a perfect recipe for making a world of software that mostly works, most of the time, but is full of bugs in edge conditions and under stress.
I don't write code like that. It's never fun to explain to a customer why your stuff falls apart under load, for instance.
If the lowest-level API does complicated things under the covers, then the power user is left with no recourse when the "one size fits all" API didn't fit.
Sure, occasionally someone will need to issue the bare system call without the libc wrapper, but that could have a different name, e.g. '_close'.
1) The current state of the system.
2) Whether the current state of the system is equal to or later than one reflecting your change.
#1 is technically unknowable without a locking mechanism, but #2 is theoretically possible. Assuming reliable time synchronization, your worst-case scenario would be a timestamp on every record, and checking the timestamp on each node (you can do this with Cassandra, for example).
I have the same issue with eventual consistency, for what it's worth: I'm fine with the fact that my updates might not be globally visible immediately, but I want to have a way that at some point I can know that they have propagated (aka. "eventually known consistency").