All these disasters come from multiple levels of failure that contributed to the end result. If not this, if not that, if not the other -- then it wouldn't have happened. I think it's important to recognize those factors, but doing so can also be a cop out.
For example, you can't use the Heysel argument of, "Well, if Belgium left the bars around the stadium open before the match, what did they expect would happen?" As if a bar owner must presume hooliganism and thus be the behavior that had to change -- not the louts getting drunk and disorderly. That's basically saying don't blame the alcoholic, blame the brewer. Hooligans are defended and coddled with a, "But I couldn't help myself! The bar was open!" which is treating them like infants and shirks all responsibility.
You also can't use the Heysel argument of, "Well, in England we would just never let opposing fans stand this close to each other..." The hooligans weren't in England and they knew that. That's also not a defense, as if to say that public urination is legal in Pakistan so therefore any Pakistani immigrants to the UK should be allowed to piss anywhere they please.
Juve itself bears some fault in Heysel, although it's never really said enough and is probably a taboo topic here. That includes the fans at the match who incited some of the atmosphere to the fact that the Block Z tickets were put in hands despite being next door to the Liverpool lot, etc. Justice to me doesn't mean holding one group, any group, accountable and guilty. It's holding everyone accountable in an accurate manner -- although when you hear cries of "justice for the 96" that's precisely NOT the sort of justice they are talking about.
Perhaps the biggest injustice in Heysel was UEFA itself -- they skated past all responsibility and yet had so much to bear.