It seemed that the grunfeld exchange was always too uncomfortably dynamic for me so I never played it as Black and the few times faced at it as White tried to steer it toward Karpov-Kasparov Seville type play.
That being said it always seemed to me that once white gets a protected passed pawn on the d-file, here after 15...e5, Black might be most concerned with holding equality. It seems White usually ends up with a passer but I'd guess a protected one on the 6th probably wins unless Black has lots of compensation.
Maybe as you point out 20. a4 isn't best. I think White might be able to get an advantage but needs to get rid of Black's KB. That would free up White's game a lot with a possible Kd2 and d3 and maybe Black's d pawn is a goner. Possible is something like 20. Bg3. The exchange looks ugly but I'm not sure Black can generate any counter play fast enough. Plus it opens up the h-file with the possibility of posting g4. Trying to hold the center while dealing with the Kside might be too much defense.
I thought Korchnoi usually handled the Black Grunfeld Exchange well and it appeared he might have viewed an early ... cxd4 as having better equalizing chances though theory seemed to imply White was better. I didn't look closely here but might be something player post-mortem might look at.
An interesting game, and it's nice that you've analyzed it so it's even more informative. I like Black's idea with 11...Nc6 and generally the way he exploited the pin along the d file to make White extend his pawns (10...Rd8 forcing 11.d5 which weakens e5). 12.c4 is really weakening as dortam888 explained, as lack now has d4 and e5 and "jumps over" White's extended center before White has completed development. ...f5 is really a nice idea that I didn't see although it's strikingly apparent - after that Black would be able to target c4 which is White's weakness, especially if that pawn hadn't been later exposed by ...cxd4.