Hola Inés,
En el procedimiento se utiliza pasaje por referencia, por lo que se modifica directamente la memoria donde se ubica la estructura que recibes por parámetro.
En la función, como bien indicas, se utiliza pasaje por valor (por lo que recibes una copia del valor que tiene la variable), y se retorna un Diccionario. En estos casos debes asegurarte que retornas un Diccionario que te permita acceder a todos los elementos originales más el nuevo elemento insertado.
Para poder ayudarte tendrías que se más específica y aclararnos qué es lo que estás haciendo y dónde se produce el error.
Saludos