ROM hacking is a process that involves editing memory (hex) addresses in a game which can ultimately lead to having a new game entirely if the hacker is devoted enough. By changing these hex addresses you can alter the layout of the game, what events happen, what characters say, what pokemon look like, how the graphics are, or how the region appears. Basically, everything about the game.
When one makes changes to a ROM they are actually altering hex addresses (memory). This is what is really going on at a deep level. Every single program for editting ROMs is changing hex addresses in the game.
Here I describe two popular programs that one can get pretty far into making a complete hack with:
-Advance Map (This is probably the main program you'll use to change anything, there is so much that one can change in a ROM with this)
-XSE (eXtreme Script Editor) (This is to make people, items, and events happen in the game. Works in tandem with Advance Map)
So, I've talked about editting a ROM, but how do you actually get a ROM? For that, a common method is to download them from a site which a simple Google search will do. I'd recommend firered or ruby to start with as most people use those so much more is known about them than their mirrored version.
So all that covers making your own hack. If you want to play a hack or perhaps test a ROM you would use the emulator VBA (Visual Boy Advance) that I talked about. You probably need the ROM that the hack is based on and in order to play the ROM you usually need to apply what's called a patch and as I recall LunarIPS patch is a program that is often used for that.
I hope my description of ROM hacking has helped you. At the very least you know what terms to search for and read up on. There are also lots of helpful tutorials on youtube. (That's where I learned basically everything) Let me know if you have any further questions I can help with.