Yeah, the NES does everything like that, so you better get used to it. This is how the CPU, where the program is running, "talks" to everything else (controllers, sound hardware, video hardware).
The CPU (6502) is just a part of the NES. The program (game) running there must tell all the other parts what to do, and receive information from those other parts too, and this is all done by reading/writing from/to special memory locations.
As tepples said, you'll freak out when you hit the PPU and the mapper stuff, but specially the mappers, because those "special addresses" do different things in different games!
Anyway, there are many many documents indicating what each address does on reads and writes, just look at the main NESDEV page.
EDIT:
BTW, this:
Code:
$2006 (stored from A)
$2006 (stored from X)
$2007
Is how you write data (such as background graphics or color palettes) to the PPU. The PPU memory is on a different address bus than the CPU memory, so the process for sending stuff from the CPU memory to the PPU memory involves writing the address where you want to send the data to (the address is 16 bits long, hence the 2 writes to $2006) followed by the data itself (writes to $2007). The address is auto incremented after every write to $2007, as this was meant for sequential data. Every time you want to write something that's not sequential, you have to set the address (by writing it to $2006) again.