I think I found a way to (sort of) filter non-stackable items, narrowing them down a bit.
This thing has many branching paths, but let's see where they go:
The input starts up here, in this double-chest, where it goes down into this yellow bit:
The hopper is pointed at the brewing stand, and if the non-stackable item in question is a potion, it will go into there and get taken out into the chest, which is output #1: Potions. Unfortunately, I couldn't find a way to filter out the different kinds of potions without destroying them, but if you think of one, let me know.
If the item is not a potion, it will go down into a hopper below, which is locked for a short time to ensure potions have a chance to go into the brewing stand, where it moves on to the next step:
Here, we can separate out certain items. Flint and Steel, Shears, Water Buckets (including the ones with fish in them), and Lava Buckets all stay in the dispenser. Other items are shot out. Shulker boxes get placed, but are broken and carried on by the piston.
Here you can more clearly see that items that are shot out go to the left, while anything still in the dispenser will go the right. Fish in the buckets unfortunately don't get picked up again by the dispenser, so the fish will eventually die and go the right as well.
The next step (for items that are shot out of the dispenser and went to the left in the previous image) involves filtering out both minecarts and shulker boxes. Shulker boxes can't get placed on the rail and simply get stuck in the dispenser, and are taken out from below. Minecarts get placed onto the rails and get broken by a cactus. Minecarts with a chest or furnace are broken down completely, and a non-stackable item filter will separate out the minecarts specifically. Other items are just shot out. Here you can also see that I just use a regular non-stackable item filter to get rid of the fish that would be left behind by the fish-in-a-bucket items.
This next step will separate out boats. The boats get placed in the water and are then pushed over and broken by the cactus, but other items are just shot out into the hopper.
The next set of items I can filter away are armour items (including turtle shell helmets and elytra), since they can get placed onto an armour stand by a dispenser. The item is shot out, and, if it's armour, it gets placed onto the armour stand, which is then pushed off to a chamber below. If it's not armour, the item is picked up by a hopper underneath the trapdoor.
The armour stand drops into this chamber, where it triggers a tripwire, which retracts that downwards-facing piston. That allows the skeleton to see an iron golem, which prompts it to shoot. The arrow breaks the armour stand, and if one arrow does escape, the water ensures it will never reach the golem and kill it. The armour stand and whatever armour it may or may not be wearing is dropped and put into the hoppers.
The armour stand is filtered out via a non-stackable item filter and put back up top into a dispenser where it can be used to filter out more items. The armour is non-stackable and winds up in an output hopper (the chest).
Everything else, including tools, weapons, books and quills, cakes, soups, milk buckets, banner patterns, and enchanted books all wind up here. I tried to use pandas to filter out cakes, but they were way too unreliable. If you can think of any way to narrow those kinds of items down, let me know, but until something comes up, this is just the "misc." output...
However, going all the way back here, items that stay in this first dispenser (water buckets, lava buckets, flint and steel, and shears) are all going to the right (the dispenser fires multiple times so water/lava buckets are picked back up).
They first go into the dispenser on the left. Lava buckets just get shot out since you can't place lava into a trapdoor. They are picked up by a hopper and put into this chest. Flint and steel/shears both stay in the dispenser and are taken out from below it. Water buckets waterlog the trapdoor and leave just a bucket in the dispenser.
The regular bucket is separated out via a non-stackable item filter and put into the dispenser on the left, where it takes the water out and goes into the chest down below it.
Flint and steel/shears both go down here instead, where the flint and steel lights the netherrack on fire, causing a block update, which triggers an observer and allows it to flow down below, but shears don't cause any such block update and just wind up going off to the side.
So, in short, I was able to separate out potions, shulker boxes, minecarts, boats, lava buckets, water buckets, armour, flint and steels, and shears. If you can think of a way to filter out more, please let me know so this machine can be improved upon.