- Hitting someone with a flash does not guarantee them to be blind.
It is possible that they turn away or take cover behind an obstacle in time or that the grenade explodes behind them for some other reason. If that happens they're not blind and will still be able to see you.
- Remembering a position is a good advantage.
When I know where I looked at before I got flashed I can still use that information to move accordingly. This also includes hiding, shooting at known targets, etc. If a grenade comes your way it is not that hard to guess where it came from (and shoot in that direction if you have the chance). It's also possible to see an opponent just before it goes off. In that case it's not hard to shoot them either.
- Knowing popular positions.
Hiding behind a crate does make you invisible, but not invincible. It is common practice to shoot at popular hideouts and depending on the map and situation there are a few spots where almost always someone is hiding. Shooting or throwing grenades there first even without seeing someone is no real magic... just common sense.
Cheats (or "hacks") exist almost everywhere. Counter-Strike is no exception. A "wall hack" as mentioned in the comments is one of these that give the cheater the possibility to see other people through walls. Most of these cheats also include other options, like not being blind when hit by a flash grenade or seeing through smoke, etc. But beware, cheating is a bannable offense and Steam will ban accounts of caught cheaters, so they can no longer join servers protected by Steam (e.g. VAC).
- Guessing / Luck
I've had some kills that actually looked like cheating, but they were just luck and/or good timing. There are some situations where you know they're coming. You get flashed, hear their steps and just open fire, because there is only one way they can come from (e.g. Dust2 B site or Nuke ramp). Counter the flash with yours and spray and pray - works for both sides.