The problem is per-app firewalls used to be able to block all apps/traffic equally. Apple then deprecated/discouraged the KEXT mechanism these firewalls used in favour of NEFilterDataProvider which, as you described, is clearly an inferior solution.
You can't claim that these apps were not meant to do the very thing they used to do until Apple made such operation effectively impossible.