How to prevent the intersection of mesh particles
Perhaps part of a solution.  On the far right a single mesh has many triangles.  In the middle the mesh has some randomness introduced by user actions.  On the left is a render of particle system with minimal overlap and some randomness.

Of course my views are focused on a top down view for explanation purposes.  Your views will have artistic intention.

A Bit quick and dirty because there are not scripts or externals tools.  Some user action is required.

The far left image of triangles can be created by multiple means.  One method is to place 4 triangles in a mesh, add two array modifiers, then apply the array modifiers.  The triangle faces were for legibility.

In the middle part of the image.  Edit Mode, Face Mode. [Select Random] of faces by 10%. Or you can select faces manually. Copy and Paste faces or not. Toss a coin, Delete the faces .. or not. Then a proportional edit with [individual centers] and [Proportional Edit Falloff] Random or not. Adjust influence sphere. Repeat as necessary. Try many quick experiments and maybe the GPU will burn out. The distortion of the triangles was not a goal.  Proportional edit minimizes some work since it can operate on large portions of the mesh.  Be careful or mistake will occur with crowding.

On the right is the particle system.  Random &lt;= False, Emit from faces, Particle/Faces &lt;= 1, No Physics. No Gravity influence. Emission frame interval [1,1].  The idea was the Blender User Can see the locations.  If the terrain is flat enough a shrink wrap can be performed.

Perhaps a script would be easier.