FWIW, we solve two similar problems in the Fuchsia build:
1) To construct the sysroot, whose content rarely changes, we have global
lists of
scopes that describe exactly which files should be copied into the sysroot, with appropriate dependencies. Then we
process them directly in GN to create copy() targets.
2) For installing binaries into Fuchsia packages, we
add metadata to each target of interest, collect these using a generated_file() target that produces
a JSON distribution manifest file, then have another action process the manifest as input to generate the final archive.
Either method should work for you, depending on how often your mini-filesystem changes. I assume it would be far less complex than our implementation for you too :)