The difference between a hex editor and a hacking tool like A-starter, is that hex editors aren't game specific while A-starter is. A-starter knows where it needs to overwrite data to change the starter pokemon you get and that's what it's programmed to do.
Hex editors can be used to do the exact same thing and all other stuff people use tools for as well: mapping, events, scripting... + asm coding.
However, with a hex editor, you've to first figure out where the data is stored what you want to change and possibly, how the data is stored (when doing something "not for newbies").
Let's for example say that the starter pokemon data in ruby is stored in 0x150A2 (not the right offset though). By knowing that, it's almost as easy to edit the starter pokemon with a hex editor than with A-starter. You'd have to open your ruby rom with a hex editor and go to offset 150A2. There you could find something like this: 00 FC 05...00 FF 05...01 02 05...
FC is a digit in hexadecimal system which is 252 in decimal and so Treecko's number.
FF -||- 255 and so Torchic's number.
102 -||- 258 and so Mudkip's number.
05 is just 5 in decimal which would be the level of the pokemon.
There is a tool for doing it but however, there is a lot that cannot be done with it.
You can't for example change the types of the trainers (gym leaders are different from normal trainers cause for example falkner's pokemon know mud slap) and I think the one, who created a tool for this, couldn't take notice how resizing the name of the trainer effects to the pokemon data of the trainer.
To put it simply, learn how to hex edit - that's all.