It sounded like your problem was restricting access to some /proc/<pid>/ dirs and not others without knowing the PIDs ahead of time:
> How do you [...] allow reading only certain files in /proc, where process IDs are not known ahead?
Such things like /proc/cmdline should be even easier. You can just set DAC permissions and ownership on such files. You can just set ACLs on such files.
> There is also a catch that the program can create a new unprivileged user namespace and mount /proc there thus bypassing my daemon completely.
You don't get the ability to mount just because you created an unprivileged user namespace.
> For example, why do applications need to know the kernel command line? What for? Why do they need the list of major and minor device numbers? List of filesystems? Network configuration?
Because you might ask them to get that info. If you wouldn't have a use for that, you prevent that using one of a number of security mechanisms, including writing your own SELinux policy where you don't whitelist that access, setting DAC permissions and ownership as such, ACLs as such, etc.
Applications compose and are heavily configurable, and they include such things like language interpreters. You may want to write a script that uses any of that info for whatever. You may want e.g. your window manager to show that info on a statusbar periodically. That info can also be useful for conky or htop, etc.
Vim is a text editor, but you can e.g. have it make a call with ssh to get info from wherever and put that info into the buffer. You can say that a text editor doesn't have a need to read network configurations, but maybe by composing with ssh it does, and it does something useful with it.