Not having tag hierarchies doesn't fix the difficulty of classification, it just handwaves it away. There will always need to be (super)tags that are collections of other tags, where it is a bug for an item that has a particular tag to not also have another, related tag. The question should be
how you're going to handle that, not if you're going to handle it, or you'll end up with a lot of broken tags of dubious usefulness.
Tags are just dumb strings that label data, but tags are also data. If I can't label tag:"red" a tag:"colored" in your system, it's not great. It's not much better if I'm labeling things tag:"colored-red" because if I'm doing that and there's no central validation to add semantics to that relationship, I'm going to end up with tag:"red" things, tag:"colored" things, tag:"colored-red" things, and probably even tag:"color-red" and tag:"red-color" things.
edit: what's so bad about cycles when it comes to a tag being assigned another tag that has been assigned the original tag? It's just a mutual implication. There's nothing wrong to me with adding a single tag and seeing five more added automatically. It means that you're building a knowledge base.