How do you implement memory
Writing your own allocator is a common system programming exercise. Only thing you need from "outside" is a memory region to manage. If you are programming bare-metal, you'll likely have a memory map available that describes which regions are RAM. These you can manage with malloc.
and process management
Processes on a modern OS are a number of things. They usually have their own page tables, a context (registers to save while the process is suspended) and a number of other process-specific data structures.
The data structures you can set up in C, but their "activation" (switching page tables, saving/restoring context) is usually beyond what's possible in portable C. For those you either have assembly routines or some inline assembly interleaved with the C code.
and so on, specifically what functions are available and what is exposed to allows you to do this in C instead of assembler?
There are hosted and freestanding C implementations. If you write your own OS, you are usually within a freestanding C environment and you have no standard library provided functions at your disposal. You rely on your own code, write assembly routines or you use compiler intrinsics.
what do you call to interact with memory
You can cast integers to pointers and manipulate the pointees. volatile
allows you to tell the compiler that you absolutely want to do reads/writes in the order written.
devices
Many devices are memory-mapped, meaning that you can communicate as if you are reading/writing memory (simplified; caches can make this a bit trickier). Other devices are addressable over dedicated I/O ports. Those require special instructions, which either the compiler has intrinsics for or you need to implement in assembly (that you can call from C).
interrupts?
Like above. Parts like enabling/disabling interrupts might require dedicated instructions. Setting an interrupt handler might be just a matter of writing a function pointer to the correct address.
I'm more than happy for an answer that includes some further reading but if you'd be able to summarise the main points related to each question that would be super handy for me!
My suggestion is getting yourself an ARM Cortex-M and start playing around with it. osdev as noted in the comments is also a very nice resource.