You actually have 2 ways of doing the frustum check:
1) Every scene component (or most fo them) has a property WasRecentyRendered()
-- so if it was recently rendered - they are 99% in the camera frustum.
2) You can manually check the frustum with something like described here:
To make it all performant you can trigger some object-...
I think I am in the same mindset as you are.
Yes you can work in 100% C++.
My own project is 95% C++ I only use BPs for instantiating stuff (putting actors to the level) but every single BP of mine is nothing else than just a default values setter.
It is much faster to set default values in BPs as well as performing visual stuff - for example moving ...