program your own particles I'm not completely happy with the way particles work in blender for my particular needs and I have previously programmed particle simulations from ground up in Grasshopper and have some basic knowledge of python, so in theory, I should be able to write my own addon the way I'd like it to behave, I'm fairly new to blender though, so I don't have an estimate of how much you can access using the api.
Would it be possible to use python to add another type of particle sim to the already existing emitter and hair types using an addon, or would this require a change to blender's source code?
Thanks in advance.
I don't believe you can use python to add a new particle simulation type. While you can use python to access the particle system data such as particle location, I don't think you will have any luck altering the particle positions.

Before you start coding yourself I would suggest looking at sverchok and animation nodes. There is an introduction to animation nodes here and you will find blendersushi has many videos of experimenting with both addons. If they can't accomplish what you want to do, they may be a starting point for your own project or maybe you could contribute your own custom node to one of them.