Completely agree! At post.fm we're trying to design an email client which will work offline, and synchronize data when online (IMAP isn't sufficient for our needs) - Exchange style. We've thought long and hard about various solutions, and have tried syncing logic-less document-stores such as this. As you say - this doesn't really work, and there's definitely no way to handle anything remotely complex like transactions. In our case "app data" is effectively all your mail and more, and we can't expect each client to have a local copy of everything, meaning partial syncing of a collection is important for us (not something any solution out here seems to handle).
The solution we've come up with, which we'll hopefully get to open-source one day, is to model state over time as a persistent "event log", which means instead of syncing documents we sync events that clients perform, replaying events instead of document-update statements. This approach is infinitely flexible I believe, but requires more work if your clients are written in different languages (we use JS throughout so that isn't an issue).
The solution we've come up with, which we'll hopefully get to open-source one day, is to model state over time as a persistent "event log", which means instead of syncing documents we sync events that clients perform, replaying events instead of document-update statements. This approach is infinitely flexible I believe, but requires more work if your clients are written in different languages (we use JS throughout so that isn't an issue).