"Flags" are actually bits. A byte consists of 8 bits, each of them can either have value 0 or 1. In case all eight bits are set, the byte is FF in hexadecimal (11111111 in binary).
Well, you know what RAM is don't you?
The game transfers data from ROM to RAM memory to store temporary data.
Some of RAM will stay unchanged when the game is running (e.g. flag bit data) while other part of it will change time after another (e.g. the place where the game stores which enemy you're battling against, your pokemon used and its moves...).
Anyway, let's say that flag bits from 1000 to 1007 affect a byte in ram memory at offset $D000 and flag bits from 1008 to 100F ram memory at offset $D001 (because 8 bits form one byte). In this case, we know that for example flag bit 2000 affects byte at $D000 + 0x1000 / 8 = $D200 in ram where for example the names of your pokemon in party are stored. So basically, it's only safe to use the flag bits used in the original game to make sure you won't affect other ram data with the flag bits you're using.
Then again, if you for example know that there is unused ram in DA00 to DB00, you can use flag bits that affect that part of ram region.