Pretty much no one uses BSP tree for level geometry anymore. It was a technique designed to cull individual polygons, which is infeasible nowadays where scenes are displaying millions of them at once and built mostly with meshes.
AFAIK UE4 has two visibility culling mechanisms: hardware occlusion queries and precomputed visibility. The former is fully automatic and can deal with fully dynamic scenes but is not available on mobile platforms while the later requires manual placement of Precomputed Visibility Volumes in the areas the player/camera can access, which will generate spatially-specific visibility lists for static objects during build time.
Unfortunately, I’m not knowledgeable on the internal workings of the precomputed visibility system and it’s not very well documented. I’m afraid you’d have to take a look at its source code to get an idea of the specifics, unless someone more familiar with it drops by on this thread.
From its description, I suppose it splits the visibility volumes in cells and pre-calculates a list of visible static meshes from each cell (I would need to read the source to find out the actual data structures used for this). I don’t know if it also generates octree cells for dynamic objects. It would be nice if this were better documented.
Anyway, I believe there are visualization modes and stat commands for debugging and profiling visibility and occlusion. That should at least help in letting you know if things are working as intended.