Allow me to use a metaphor to explain.
Let’s say it’s the middle of summer, and you put a group of human beings in a room with no air conditioning. All of these humans are physically the same species, but some tolerate the ensuing heat more than others. On one extreme of the spectrum, you have the people who are perfectly fine sitting in a hot room. On the other, you have the people who become lethargic and moody—even a little sick. Everyone else is somewhere in between.
Types are like that. You may have a number of pokémon that are all the same type, but not all of them will express the type’s signature weaknesses and resistances the same way. For example, some rock-types take fire-type attacks without flinching, while others feel visibly uncomfortable by proximity to heat. Conversely, magnemite and a number of other steel-types absolutely hate heat, but lucario and more mammalian species are more capable of tolerating it (so long as they aren’t exposed to direct fire). This is why it’s often difficult to pinpoint a pokémon’s type.
Also, think of it like any other element of taxonomy. Yes, to researchers, pokémon types are merely another form of taxonomy, or classification of living organisms. With the broader classification of organisms, system used by modern scientists splits all organisms into seven kingdoms: Bacteria, Protozoa, Chromista (for algae), Plantae, Fungi, Animalia, and Pokémonica. Sixty years ago, however, there were only four kingdoms, as scientists grouped algae and fungi with plants and pokémon with animals. As our understanding of the world grew, we realized that this system was insufficient to describe the organisms we were studying, and so, the system changed to fit our needs. Types, being another form of taxonomy, are just as fluid as the grand system of taxonomic ranks.
That is to say, although we researchers do our best to classify pokémon accurately, sometimes, our way of describing them needs to change due to newly acquired information. The fairy type is actually an excellent example. The pokémon that have been reclassified into that particular type have a wide variety of offensive and defensive capabilities, as well as a variety of secondary types, all of which made it difficult for researchers to notice that they shared any characteristics between them.
For example, clefable and wigglytuff are both hardy pokémon, but because of that, both are able to withstand venomous attacks far better than a number of other fairy-types on record. As such, scientists didn’t realize either of them had a weakness at all until their battling abilities were compared to other normal-types. (In actuality, it was only recently pointed out that both types weren’t simply tolerating Dragon Claw and other dragon-type attacks due to their hardiness; they were quite simply immune to dragon moves. After that, a full-scale study was done on them to determine why.)
Conversely, gardevoir is a far more fragile pokémon than clefable and wigglytuff, and as such, it was originally thought that its weakness to both poison and steel can be easily explained by its lack of defensive capabilities. It certainly didn’t help that its secondary type could easily dispatch both poison and fighting—the latter of which gardevoir boasts a double resistance to—making understanding the abnormalities of the species’ weaknesses and strengths particularly difficult to understand. It was only after we had compared gardevoir’s ability to withstand bug- and dark-types to gallade’s that anyone had realized that perhaps there was something else going on.
The point is that the type classification system is a classification system first and foremost. Each pokémon within every type actually has differing tolerance thresholds when it comes to withstanding other elements. Even clefable and granbull—both mammalian pokémon who were reclassified from pure normal-types to pure fairy-types—don’t handle poison and steel moves in the exact same way. Ultimately, however, whenever the scientific community obtains new information that sheds brand-new light on a group of pokémon, we change the classification system as necessary.