We revised the muapi.h interface recently around results of most instructions, removing add_result, and adding get_result and num_results. It seems that the situation around destinations for instructions such as BRANCH2 (just an example) is similar. However, in this case I think it appropriate that the destination be built by the user of the API before making the call to create the BRANCH2, and the two handles on the destinations be passed in to the API function that creates the BRANCH2. I think this works for most branching things.
CALLs may be more problematic in that the destination may want to mention CALL results to pass on. However, a CALL node could support add_normal_dest (or set_normal_dest) and similarly for the exceptional destination.
But when we know the number of destinations, and the instruction itself is not producing more results that the destination can refer to, it seems cleaner to build the dests first and pass them in.