Hi Kenny,
The code is fairly modular, so I think it should be possible to pull out a subset that has a reasonably small code footprint. However, this is admittedly not a well-traveled path, so you'll be a bit on your own. The maintainers of the C++ implementation (such as myself) mainly use it on big beefy servers, so we haven't had a whole lot of reason to work on optimizing code footprint.
CAPNP_LITE might be a good starting point. Note that that option was not really designed to minimize code footprint, but rather was designed to identify a subset of code that could be compiled on MSVC circa 2013. MSVC has since improved, and is now able to compile the whole codebase. Hence, CAPNP_LITE is a bit vestigial now and may have bitrotted somewhat. But, it definitely does cut out a lot of bulkier parts of the library, which you'd also want to remove in an embedded system. So it might be a good guide.
Another option that might be less work would be to use c-capnproto, which I think is more explicitly designed for constrained use cases.
-Kenton