Side note: I recently "upgraded" to macos 10.15, and so also xcode 12.1. Because of this, the default MacOs SDK is 10.15. This won't compile with that, but earlier SDKs can be found here: https://github.com/phracker/MacOSX-SDKs/releases. Download the required one (10.10) and place it in the folder specified in the CMakeLists.txt and it will compile.
After quite some thought about it, I realized maybe the world node would make most sense as a kind of window/render (something more accurate) property node. This would be equally true for physics, particles, and in the future maybe volumetrics and procedurals as well. Layers and objects should be kept as is, but an addition of "wrapper"-nodes for additional properties for layers/objects would deal with the necessities. Hard to explain, maybe this helps:
An approach like this would take advantage of already implemented solutions, and would make learning how to use it simple, as you only add on to an existing base. If you think about it in the context of "Add [Physics/Particles/Volumetrics/Procedural] to Object], it would be a drop in solution for some pretty nifty stuff for existing projects/compositions.
You also get rid of an additional complexity layer by using objects/layers as the base for forces. This could perhaps be a generic object/point(list) port though for the cases where you only need points for it. This would also prime the solution for the use of volumetrics for flow-fields with 2/3D gradient noise (Density port being a generic image/volumetric/object port).
I also think simplification is key to a good implementation. Is repulsion for instance necessary? Could it just be negative attraction?
I'm starting to ramble, there is a lot to this, but maybe it could be a solution?