>>34336367I have given reasons.
Let's start with how they're usually used, trading back and forth. This requires a close friend that also plays pokémon that you can thrust which many don't have no matter if they're social or not.
If you don't then trying to evolve your Haunter becomes a very risky move, no matter if it's in-game or competitive since it requires thrusting a stranger.
Now, let's assume you do have a friend like that, it can still be inconvinient during an in-game playthrough since it requires your friend to be accessible during your playthrough or else it comes to an halt. This is not a huge problem when it comes to competitive team building since it usually takes a longer time and it shouldn't be a problem to find a time that works for both of you.
Now let's look at the intended way, which is to trade your mon and let go of it, and why it is implemented poorly.
Say if you want to use a Gengar then you're going to have to trade for one. Training a Gastly yourself if pointless unless you're going to use it for the offer. If you had a Gastly with you from early on you will have to sack it and it can not become your Gengar if we'r going by intended use.
From a competitive standpoint intended use is ridiculous. Since it requires your partner to have bred a competitive viable Gastly. Which can be hard to find if you want a legit one and can also be hard to trade for. Trading for competitive mons is great, but when it is the ONLY way to "intentionally" get a competitive Gengar then it is not.
On top of this there are several other features that encourage trading, like shinies, competitively bred mons and most importantly version exclusives so trading would still be a core aspect without trade evolutions.