Recursion and merging semantics are also necessary. I use Nix and Jsonnet a lot, but Nix is much more expressive for complex structures, but the tooling being tightly coupled with the package manage make it impossible to adopt for common use cases.
I don't recommend using dynamic filters because they completely override any matching static filters. Makes the point of filter lists useless, if uBo had a way to set dynamic filters to a lower priority than static they might actually be useful. At the moment the only way I found to replicate uMatrix was to use static filters to block by default on a per domain basis and whitelist domains per request type. It is a lot more work so I only do so for sites with user generated content (e.g. hn or reddit) that have links to who knows where that you might want to prevent from loading.
From sifting through the leak, it was a fork of ffmpeg they converted to C++, but still retains ffmpeg naming/structures. They dropped any code they didn't use also, so it isn't very much code.