Way out there idea (but works, or so I have been told)
If you apply the same IIR filter both forwards in time and filter a second time backwards in time, you can get zero phase shift. That will then let you simply subtract it from the original signal and calculate what has been filtered out.
The cunning part is to work out how long "infinite" is in the context of your filter - for example, if it can be proven that at time 'n' the maximum difference that sample n-32 makes is less than 1 bit, then you could do the following....
Process overlapping blocks of 320 samples (32+256+32) in the forward direction, giving the last 288 samples (256+32) that have insignificant errors, but do have phase delays from the IIR filter.
Then process those three 288 samples in the reverse direction, ending up with the middle 256 samples that have insignificant errors, twice as much filtering, but zero phase delays.
You can't do that in electronics with Ls and Cs
Edit: Image attached of applying the IIR output(n) = input(n)*0.3+output(n-1)*0.7 twice - one trace is applying it forward in time twice, the other is applying it forward and then backwards (or if you like, the second time is calculating output(n) = input(n)*0.3+output(n
-1)*0.7 ). Note that the latter trace is symmetric and is not skewed