In most cases, it’s a product of adaptive evolution. Each eeveelution possesses the traits it has because those better equip it for the specific niche it serves. For example, the more “feline” vaporeon looks the way it does because it’s meant to have a certain sense of agility as it glides through the water and chases after fish. By contrast, the more “canine” jolteon possesses dog-like traits because their hunting-style is more dog-like (and also because their thinner muzzle makes it easier for them to sniff out and dig out the eggs that form a staple of their diets). Additionally, the more “vulpine” flareon actually looks the way it does for a combination of both: as it hunts for small rodents on its own, it needs both agility and sharper senses. That and its puffier coat, which some say also make it look vulpine, is better at keeping its body from overheating, as strange as that is to say.
Alternatively, in certain cases, certain traits were simply bred into the species—meaning, breeders carefully controlled the parentage of eevee to ensure that they possess certain traits upon evolution, as in the case of the more cat-like espeon, the more dog-and-rabbit-like sylveon, and the more fox-like umbreon. (Of course, it’s worth it to note that fox-like adaptations have always benefited umbreon in the wild as well, so breeders didn’t exactly have to do much to get a more vulpine umbreon.)
As for leafeon and glaceon, they’re a bit of both too. They’re both vulpine, yes, but leafeon was bred to be that way, whereas glaceon essentially adapted to be that way on its own (as their fox-like characteristics make it easier for them to fish).