a) If the data isn't stored at fixed addresses, there can be no deterministic access to the cells. You would have to go through some sort of heap, binary tree or lookup-table algorithm to find the data.
b) First of all, that kind of algorithm will require RWW (read while write). Some Freescale MCUs support this, some don't. On top of that, you would need to have some sort of RAM mechanism working as a "fake eeprom" replacing the segment currently being written to.
No matter how you do this, you will still need to slap the stack in the face with 1kb, or (preferably) reserve 1kb of RAM for this purpose only. And then you also slap the CPU with all the extra CRC calculations that come with it.
And why would I do all of this!? Writing to an eeprom cell is supposed to be something extremely fundamental. I shouldn't need to write myself a heap-based file system and a minor RTOS, just to be able to store things in the eeprom. Indeed, all this extra complexity adds notable hazards to the application. The procedure of using RAM as a temporary EEPROM is highly questionable in safety-critical applications, just as one example.
With a 32 byte segment, all of the fuss is gone, and I can focus on programming my application. Building huge sand castles around Freescale's clumsy eeprom segments is no high priority of mine. And don't come waving with the app notes with eeprom emulation algorithms, they are nonsense and can't be used in high integrity applications.