Edit 2:
Now for a more serious attempt at something efficient..
findPoints =
Compile[{{n, _Integer}, {low, _Real}, {high, _Real}, {minD, _Real}},
Block[{data = RandomReal[{low, high}, {1, 2}], k = 1, rv, temp},
While[k < n,
rv = RandomReal[{low, high}, 2];
temp = Transpose[Transpose[data] - rv];
If[Min[Sqrt[(#.#)] & /@ temp] > minD,
data = Join[data, {rv}];
k++;
];
];
data
]
];
And to test it for benchmarking...
npts = 350;
minD = 3;
low = 0;
high = 100;
AbsoluteTiming[pts = findPoints[npts, low, high, minD];]
==> {0.0312004, Null}
Check that the min distance is less than the threshold.
Min[
MapThread[
EuclideanDistance, {pts, Nearest[pts][#, 2][[-1]] & /@ pts}]] > minD
==> True
Check that I generated the correct number of points..
Length[pts] == npts
==> True