Existen porque tienen que existir, ya que eso simplifica mucho la construcción del microprocesador.
Es tan simple como que cada registro de uso general en el Z80 tiene asociado un número (de 0 a 7) y ese número acaba "incrustado" en el opcode. Las instrucciones ld a,registro (en binario) son las siguientes:
ld a,b --> 01111
000
ld a,c --> 01111
001
ld a,d --> 01111
010
ld a,e --> 01111
011
ld a,h --> 01111
100
ld a,l --> 01111
101
ld a,(hl) --> 01111
110
ld a,a --> 01111
111
Hay alguna más (ld a,r o ld a,i) y fíjate que el acceso a memoria (hl) se trata como si fuera un registro.
De manera que cuando la unidad de ejecución del Z80 se encuentra con un opcode del tipo 01111xxx, sabe que los últimos 3 bits son el registro origen (aún iría más lejos, creo que un opcode 01xxxyyy codifica tanto el registro origen como el destino). Hasta ahí vamos bien.
Internamente, eso significa que la CPU tiene que "abrir" la puerta de un registro (a) para recibir los datos de otro registro. A estos niveles ya no es un tema de programación, sino de electrónica. Lo que estás haciendo es menear datos por un bus interno, y cada opcode genera señales eléctricas dentro del microprocesador.
Ahora ya sabes cómo lo hace, pero no por qué existen estas instrucciones. Como ya he dicho, tenerlas simplifica mucho la vida. Si quisieras asignar el opcode de ld a,a (o el de ld b,b) a otra instrucción, ya no te valdría la regla de que si empieza por 01111xxx es un ld a,a... lo que te complica la vida. Esto es así tanto a nivel electrónico como si quisieras hacer un emulador en C. Meter excepciones suele traer dolores de cabeza siempre. En ese sentido, es mejor tenerlas ahí aunque no se usen que tener que meter un porrón de transistores para eliminarlas. En la tabla de opcodes del Z80, la única excepción a la regla del 01xxxyyy es la instrucción 01110110 (debería ser ld (hl),(hl)) que en realidad es halt. Supongo que es intencional, aunque podría ser resultado de la arquitectura del z80.
Todavía te faltan algunas instrucciones para completar el juego de ld a,"algo". Básicamente las que se encargan de registros indexados (prefijos FD y DD), ld a,r y ld a,i. Por ejemplo, si el z80 se encuentra una byte FD, sabe que debe sustituir (hl) por (IY+nn). De nuevo, debido a que simplifica el diseño, nos encontramos cosas "raras". Supuestamente IY es un registro de 16 bits indivisible, pero hay una serie de operaciones no documentadas para tratar con las mitades de ese registro. Por ejemplo, ld h,a con el prefijo FD se convertiría en ld iyh,a (cargar la parte alta del registro IY con el contenido de a). Esto no es una instrucción oficial, pero si mal no recuerdo lo usan las protecciones speedlock y alkatraz. Ahí tenemos otro ejemplo de instrucciones que no deberían existir.
Las otras dos que quedan, ld a,r y ld a,i pertenecen al juego de instrucciones "extendidas" (prefijo ED).
Hay mejores electrónicos por aquí que lo podrían explicar mejor... yo hablo un poco de memorieta. En
esta página tienes el juego de instrucciones del z80, que muestra un poco como las han organizado.