Yeah, CRIU (the external tool that handles this) has been in a losing battle pretty much from the start. On the one hand you have the Linux kernel with tens of thousands of developers adding new features every day, on the other, you have less than 10 people which need to be able to extract every last bit of kernel state for all of those features, write that down to a file and restore it on the target.
CRIU is actively used in production, most notably by Google, but the places where it’s used tend to be very simple containers (as in, notably, no systemd) and workloads that are designed with checkpoint/restore in mind and so do not make any use of features which CRIU is unable to handle.
For LXD, we do have a couple of annoying limitations in CRIU (other than that you’ve hit) which we intend to resolve in the next 6 months or so, to make it easier for some folks to use it in production, but we don’t really expect CRIU to improve significantly in its ability to checkpoint arbitrary complex workloads.