If you feed it a encrypted pkm, it will decrypt it and provide you with values as you ask for them.
Most of the shared logic is in PKX.cs, and SaveUtil.cs
Basically the program reads the data, then various utility functions bend it into usable shape.
Probably, but I'd advise against using multiple languages that you are unfamiliar with in the same project.
If 'decrypt' means deserialize, then yes, you could use serialization with the pkm/sav by exporting it to json or whatnot.
Sure. Here's an example using LINQPad with a reference to PKHeX.Core.dll:
With LINQPad you can also 'Dump' which gives a ton of info about the object that is dumped:
... (cropped)