I eventually did notice that FleetEncounterContext actually had a LOT more going on than its corresponding Plugin, yes.
reportBattleOccurred (part of the CampaignEventListener system, not the CampaignPlugin? I'm not sure what CampaignEnginePlugin is, is that new?) doesn't seem to have any hooks into the respective cargo of the fleets before it gets discarded after a battle.
At the moment I can get what I want by copy-pasting the entirety of FIDPI and BAPI and changing one line in each, so I'm doing that, but it feels... well, wrong

(Specifically, I'm changing them to have
FleetEncounterContext context = new PersistantDebrisFleetEncounterContext();
which is a subclass with slightly expanded autoLoot and afterBattleBlah calls.)
That's why I hoped they'd call out to a factory class instead, and why I wanted FleetEncounterContext to be more moddable. I'm aware it is completely moddable right now, but because it's only used as a private instance variable in both cases, you can't change it
without also changing FIDPI and BAPI, so I suppose that's my request, I'd like to be able to change it separately without all this copy-pasting. Any ideas?
Edit: It's not that copying FIDPI and BAPI isn't working, it's just going to be bad for inter-mod compatibility unless I provide instructions on how anyone else modifying FIDPI and/or BAPI can selectively use my new FleetEncounterContext subclass, which on second thought is an amazing position to be in, and I commend you on your mod structure that my only REAL complaint is "I'm changing something really deep in the implementation code, could it please be easier for other mods to automatically pick that up". I know I've mentioned it before, but you really deserve praise for your game+engine's moddability, it is the best.
Edit2: Looting doesn't remove stuff from the cargo in question... *bleeeeeerrrrgh*
Edit3!: CargoAPI.getStacksCopy() isn't guaranteed to actually be a -separate- copy of every stack... double*blergh*