Hey Tom,
I think you can get to where you'd like to be by using a variable in a repeat statement. I've attached an sample of how this could look, but read on for an explanation...
Start off with a loop for all of the 'Business Requirements' type of requirements, (re)setting your initial variable value - use a $repeat statement limited to the appropriate type, and $set your variable. I used $$ProjObRef so it reflects some meaning, but it can be anything you like.
Switch the variable (reset it) if there are any referenced 'Project Objective' requirements. I used a $when/$endwhen section instead of nesting another repeat statement for some added template performance (be sure to use an appropriate conditional clause here, too), since we're just looking to see if any references exist and we don't actually need any other info on those requirements.
Next, use an $if statement to check the variable's value, and include keywords for the requirement ID, name, or whatever other requirement properties you'd like (this is the exception list) if the variable hasn't been changed up by the new setting inside the $when/$endwhen.
Tie up the snippet with an $endrepeat, and there you have it. Let us know if you have questions.
A caveat: by having a "top level" business requirement, I'm assuming you mean at the top level of your project. You could limit the scope of your reporting to only include the top level package to report on just that level of requirements. If you instead mean "non-nested" requirements (not including any children in your list), you should add "and IsTopLevel = True" to the first line of the example.