More than just being the series' mascot, Ash's Pikachu in Pokémon has been his journey-long companion since Episode 1 of the anime, with hardly any episodes without him. But one quick look at the games' stats will tell you that Pikachu is not a particularly strong Pokémon with average abilities that almost double upon evolving to Raichu -- so why hasn't he? With over 20 years' worth of episodes and multiple Thunderstones available, why hasn't Ash evolved Pikachu to his stronger, more impressive and final form?
The answer's simple: in Ash's mind, it was never his choice to make -- it was Pikachu's. As a human who never evolves, Ash doesn't have a frame of reference for what evolution is like, other than outward observation. As such, throughout the series, he's never trained a Pokémon with the intent of forcing it to evolve, nor has he focused on evolution as a method of growing more powerful. While he's always happy for his Pokémon when they do evolve, he's also always respected their own choices to stay the same, such as when Bulbasaur decided not to evolve in Season 1, Episode 48, "Bulbasaur's Mysterious Garden."
So why doesn't Pikachu want to evolve? He's always on Ash's side, and growing stronger for his trainer's sake is something he's done time and time again, whether it be learning new moves like Iron Tail or Volt Tackle, or taking part in Ash's unorthodox training methods wholeheartedly. The first time Pikachu was confronted with this choice was in Season 1, Episode 14, "Electric Shock Showdown," where after being soundly pounded by Lt. Surge's Raichu, a well-meaning Nurse Joy gives Ash a Thunderstone, and both advises and warns him about evolution being irreversible.
It doesn't take long for Ash, who by this point had only had one Pokémon evolve (his Butterfree) to offer the choice to Pikachu. The fear of change is obvious in his eyes -- and when Pikachu skillfully swats the evolutionary stone out of Ash's hand, the two resolve to grow stronger as they are -- together. By taking advantage of Lt. Surge's Raichu's quick evolution, they two are able to prove their mettle and defeat Surge for Ash's first truly earned badge.
But that's not the end of the story -- it's revealed in Season 11, Episode 20, "Pika and Goliath" that Ash kept that Thunderstone, just in case Pikachu should change his mind about the whole "evolution" thing. This has its own sweetness, as it shows Ash is considering Pikachu's feelings not only in the present, but in the future, and is prepared to allow Pikachu to evolve at any time -- provided that's what Pikachu wants.
When Pikachu is yet again bested by a Raichu, Ash presents the option to Pikachu once more -- this time with the caveat that this Raichu knows Hyper Beam, which Pikachu can't learn unless he evolves. At first, Pikachu shows disdain for the Thunder Stone but later looks at it more seriously, before the show cuts away to Ash returning to Pikachu's bedside -- to discover no Pikachu -- and no stone. When they finally find the mouse Pokémon, he's simply training. Team Rocket shows up, having stolen the stone, and encouraging Ash that Pikachu doesn't need to change to defeat the new adversary. Unsurprisingly, they turn out to be right (and get to make a pretty penny selling the stone!).
This doesn't explain Pikachu's aversion to evolution, but Pokemon Journeys may have finally given a subtle explanation. Season 23, Episode 1, "Enter Pikachu" revealed that Pikachu was originally a Pichu and lived with a group of Kangaskhan who grew to be family. Upon discovering the burden he was placing on them, being carried alongside a baby Kangaskhan who was steadily outgrowing its mother's pouch, Pichu decided to leave -- and his feelings of gratitude caused him to evolve into Pikachu.
Perhaps the reason Pikachu doesn't want to evolve is that he associates "evolving" with saying goodbye -- and he's not ready to leave Ash.