This is the big ProgPoW debate currently being waged over in Ethereum land. You are right, it isn't possible to prevent ASICs, in fact everything is technically an ASIC.
So, with that in mind, the goal of ProgPoW is an attack on the economic incentive to build an ASIC, not an attack on the ability to build one.
In other words, make purchasing a commodity GPU as inexpensive as a custom ASIC. If that is the case, there won't be an incentive to build ASICs.
ProgPoW also has a second line of defense where a hard fork with a minimal set of changes, can brick existing ASICs.