Yeah pointers or think of a shorter way of phrasing it.
You can't insert as the game has preset ways of knowing where certain things are within the ROM. If you add a bunch in the middle then when it skips along to where it thinks the data/instructions/whatever should be if it is after where you inserted (or deleted) things then it encounters something else and usually crashes or does bad things.
Pointers are the thing the game (and indeed programs in general) used to... point the way to where things are housed. As everything has a pointer then adding random data in the middle of a game breaks potentially thousands of the things elsewhere in the ROM. As changing thousands of things is a nightmare you don't do that and instead change the pointer to go somewhere else where you have room.
I usually liken it to a contents page of a book. If you stuffed a bunch of pages in the middle of the book and counted 90 pages like the contents said you might find yourself in the middle of your new stuff rather than what you wanted.
Pointers work in many ways depending upon the game and system. The GBA has some of the easiest of all though.
While you might open a file in a hex editor, call the very first byte position 0 and count from there then game consoles seldom do that. Far more important things to have at position 0. The GBA then uses a later part of memory (technically three but we will skip that one for now as the other two are rarely used). Specifically 08000000 through 09FFFFFF in the memory the console uses. http://problemkaputt.de/gbatek.htm#gbamemorymap
if you are bored and want to know more about what is where in GBA memory.
As most GBA games are less than 16 megabytes and only use the one section then most GBA pointers start with a 08 and are the address in the ROM (albeit flipped*) as you would find it in your hex editor.
Some then search for the address (flipped around) with the 08 in the relevant location in that number of the data they want. Can get tricky if instead it is the start of a section that the pointer references. Some will trace the data back through (you can tell emulators to stop when something is being read and tell you what read it) and part of that will be a read of a pointer so it knows where to go. Others will search for pointers in general (remember most start with 08) and then see if they can locate it from there.
*just like year, month, day vs day, month, year vs the complete stupidity of month, day, year then computers have their own holy war on how best to represent numbers. This being big endian vs little endian. Your PC uses nice easy to read numbers, called big endian. Most things that are not the PC will use little endian wherein the numbers are flipped around for reasons that historically made sense but today make less sense. If you scroll down a bit on the link above to where it says "Data Format" it will cover a bit there. Give it a bit of time and you might even read things automatically using the little endian format. That or search for big endian vs little endian in your language of choice, or maybe endianness, as it is a fairly important topic within computing so something probably exists.