I once worked on a bot called Aura. I wanted it to be the top of both leagues, so I carefully worked out a clever navigation, conspec, and spreading systems. At that point, Aura didn't get very far.
So, I looked at some of the other F2 bots to see what they did. They used shell. Oh-ho, I thought, I'll add some shell to Aura to make it stronger. As you may expect, it got stronger after that. But it still wasn't quite strong enough to clear the leagues. I decided to make Aura create shell to match it's current body and energy count (iirc). I didn't know it at the time, but this actually made Aura the only bot able to replenish shell that it lost (because .shell didn't update properly for shell loss). This modification let Aura sweep F1 and F2.
Now, some of the people reading this will think that the navigation, conspec, and spreading systems might have contributed, but all three of those had pretty bad bugs in them. The conspec occasionally failed. Aura wouldn't accelerate past a certain velocity. The aim was calculated incorrectly. It also wasted lots of energy moving back and forth away from allies (bots are able to find food more quickly at a much lower energy cost). I believe that all of the things that I had thought were clever at the time were actually detrimental to it. Aura swept the leagues for two reasons: it had giant onmi-eye vision and it was the only bot that replenished lost shell.
This is the kind of difference shell makes.
I consider shell to be too much of a factor in F2.
If F3 includes shell, there won't be a significant difference between F2 and F3.