A process is mainly identified by one or more threads that run on its own virtual memory space. That concept applies not only to seL4 but to all the OS in general.
In the hello-2, the thread shares the same vspace as the root task (the root task obtain the vspace from the kernel through the simple interface on Task 7, then is shares it with the newly created thread in Task 9).
In hello-4, the root task creates a new virtual memory space in Task 1. In Task 2 this new vspace is given to the process creation function (that internally uses it to create the process Page Directory). Then when the thread is created in Task 6 (the sel4utils_spawn_process is just a utility function that set up the TCB and the registers of a new thread), it supplies the newly created vspace + PD instead of sharing the one from the kernel (root task).
There is not really a dynamic linking process in seL4. The child process application is stored together in the same image as the root task, in a separate ELF section.
When the root task call sel4utils_configure_process_custom (Task 2), it takes the name of the app and end up calling sel4utils_elf_load() that scans throguh all the ELF sections and find the one with the given name. Once it gets it, it uses that base address to identify the entry point of the child process. Those ELF-related operations are defined in the util_libs/libelf.
Keep in mind that I don't have clear many aspects of seL4, but I hope this help answering your questions.
Regards,
Fabrizio