This is complicated by the fact that the points are not on a grid. The only method I can think of would be to find the highest point in the field, remove all the points within a certain tolerance distance of that point in the X and Y directions, and repeat until the only points you have left are the ones that are the highest in their neighborhood. However, this requires some looping, which requires scripting, at which I am not great.
As for making the surface itself, It sounds like a great time to leave GH and use the good old rhino 'surface patch' command. I do something very similar with meshes, and to my knowledge, there is no GH tool that duplicates this sort of functionality. If you are willing to leave GH, then you may be able to get away with a quick, hackey solution. You could have a height slider, and simply cull from the list any point who's height was below the cutoff. This would give you some errant points for sure, but you could Bake them, as you would have to do to use 'surface patch' anyway, and then delete the weird ones by hand. It certainly isn't elegant, but it may work.