TL;DR you can call anything, locating the right part of code is the hard part.
If you mean 'just as Windows does', then you mean the functions of the DLL that are available to the others, ie the exported ones? in this case, you need to parse the export table - check pefile for a readable and reliable implementation.
locating any function
If you actually mean 'all the functions, including the internal ones', then you need to disassemble and tell the difference from code and data. in this case, your best bet is to open the files in IDA - with symbols preferrably - and export the function list.
If you want to do that manually, then you need your own smart disassembler, which is far from trivial: sometimes, compilers generate some code that doesn't immediately look like parts of a function.
calling identified functions
Once you've located the functions, you can just call them directly, without the need of injection, but you have to make sure you have the exact same version of the DLL. hard_imports use such a method to call pieces of code directly.