it is impossible to say what is returned by the parser
That's not true though, you can tell what type of the object it is by inspecting the ref of the object returned.
I think your suggestion is workable. Perhaps you want to consider making -I_want switch optional. A more convenient interface would be a standardised approach for every file types, something like...
use Bio::Phylo::Parsers;
my $parser = new Bio::Phylo::Parsers;
my $collection = $parser->parse( -format => $format, -file => $filenam
+e , -I_want => qw/ trees / ); # I_want is optional
for my $obj (@$collection) {
....
}