There are a few tricks here to catch hidden elements universally, but none of them catch everything except the CustomExporter method. https://thebuildingcoder.typepad.com/blog/2013/08/determining-absolutely-all-visible-elements.html.
element.IsHidden catches things hidden by category, by element and even for Rooms and elements not able to be shown due to Phase settings of a view, but it does NOT catch elements that are not visible in a view due to Design Option settings.
element.get_boundingbox(view) is another good universal catch, but it’s a slow operation, and it also doesn’t catch elements that are not visible by design option settings.
element.IsHidden also doesn’t catch elements in linked models that are not visible due to the WorkSet not visible. Check Workset.IsVisible() for this.
My main issue now is that nothing I can find catches if an element is not visible due to Design Option settings, and the Design Option settings for a View are not accessible as far as I can find for a View with RevitAPI. Kind of screwed here unless using CustomExporter. What I want to know is what CustomExporter does that catches everything in the View, and why don’t we have access to all of these methods with RevitAPI?