Mmm, yo no estoy a tanto nivel, pero al leer esto se me ha ocurrido una idea. Quiza te sirva, quiza no... Seguramente no sea lo optimo, pero bueno. La unica putada, que no seria dinamico (dentro de lo que cabe)
Se sabe que tienes un numero variable de elementos dentro del objeto y que tienen un tamaño no fijado como tu dices.
Si a cada objeto le reservas un espacio de X bytes para todos sus elementos, y te ideas una especie de "elemento_final" con alguna secuencia que no se vaya a dar en casos normales (por ej. siguiendo con los telefonos un 000000, o algo asi), podrias guardar los elementos que si que tienes, poner el elemento final, e irte al siguiente objeto dejando el hueco entre medias vacio.
Luego a la hora de añadir o quitar elementos a un objeto, como cadad objeto tiene su tamaño fijado, podrias localizarlo relativamente facil, extraer el elemento, modificarlo como a ti te convenga y volver a guardarlo sobreescribiendo solo ese segmento del fichero en lugar del fichero entero.
Inconvenientes, la primera vez que el fichero se guarde... tardara mucho, muchisimo mas. El tamaño será mucho mayor de lo necesario en primera instancia.
Pero en contrapartida, a la hora de editar (que creo que para ti es mas importante) lo tendrias todo mas disponible y no tendrias que sobreescribir el fichero entero cada vez que modifiques uno de tus elementos, solamente la parte que a ti te interese.
El como hacerlo... ni idea, pero al menos tienes otra alternativa, ahora depende de ti el sopesarla y ver si te saldria rentable para tu aplicacion o no.