After months of rewashing everything by hand I finally cracked it. Turns out the filter in the bottom of my dishwasher was completley caked with gunk. I honestly didn't even know it was removable til I watched a video on a whim. Popped it out, scrubbed it in the sink with dish soap and an old toothbrush, and the amount of sludge that came off was gross. Also checked the spray arms while I was in there and poked food bits out of a couple of the holes with a toothpick. Ran a load that night and everything came out clean for the first time in ages. Glasses are actualy clear, no more hardened cereal glued to bowls. I had been blaming my detergent and our hard water this whole time when the machine just couldn't spray properly through a blocked filter.
Now I rinse the filter every week or two and it takes maybe two minutes. If your dishes keep coming out with stuck food and you've never checked yours, that's the first place I'd look.