Since Horde libraries are already used in the Mail app, it seems the dev team is already familiar with integrating them inside an app, so there shouldn’t be any major hurdle to building an efficient sync app.
You could install Z-Push. Its a PHP Script which works as a EAS Gateway to other Apps. Primary use was Zarafa or Kopano, but you can use a other Backend like BackendIMAP or BackendCalDAV or BackendCardDAV or BackendCombinded. The First ones connects to a single Backend, but BackendCombined connects to more than one Backend. So you can use IMAP, CalDAV and CardDAV together. Only disadvantage is, all Backend’s must share the same Credentials, as they are checked only once. Its easy to install, just download from http://z-push.org/download/ unpack, edit your Webserver Config to use the Alias, define the Backend(s) and thats it.
IMAP and CalDAV does work in my case since some minutes. I would like to Test CarDAV to in the evening. If i have all up and running, i could write a small tutorial. However, i fear on my Machine there are some ressource limitation, because its only a small Raspberry Pi. So maybe we see some timeouts in nginx logfile and as a result some loop message from z-push. This was the case, as i used a similar setup with Baikal Server on the same Machine before. But maybe, i dont so much TCP Connections with NextCloud. On bigger setups, this should be no problem.