Sorry, I don't know anything about a "real" 6502 compiler or assembler. But however you slice it or dice it a byte is only going to hold 256 distinct values. If you want to address >256 memory locations you will have to represent them as two bytes.
Too many years ago I used an Archimedes computer which happily addressed an address space of 2^32 locations (a big deal in those days) - but it used a 27 bit address bus! What it did was specify addresses using an address + offset. This baroque arrangement was hidden from the C/C++ programmer except for the detail that structs were (for efficiency) aligned on four byte boundries (so the offsets weren't needed). Google will probably reveal how the 6502 did things.