Unless --skip-crypto is used gpgtar collects the tarball in memory using es_fopenmem. For obvious reasons it should use es_fopencookie so that it is really possible to tar up large data.
No need for callbacks actually. We can do it in a simpler way. See commit rGe5ef5e3b914d5c8f0b841b078b164500ea157804
Having a separate thread to read stderr from gpg would allow for some better diagnostics, but that is left for a future patch. The overhead of polling stdout and stderr required to do so without a separate thread is not justified due to performance issues.