I think it makes sense to add a separator above so that it's in a separate "category". E.g. this would be where the transform UVs/fill tool would be too.
if (region->regiontype == RGN_TYPE_WINDOW && event->type == LEFTMOUSE && event->val == KM_PRESS) {
if ((ret & OPERATOR_RUNNING_MODAL) != 0 && event->type == LEFTMOUSE && event->val == KM_RELEASE) {
Yea that's fine. Doesn't need to be a general feature everywhere. We do implement this behavior for the dopesheet channels, so I think for GP it makes sense to have them in the properties editor too.
Since this is a nice quality of life improvement (drag and drop can be a bit fiddly), I don't have an issue adding this.
I don't think it's a good idea to change the UI this way. It's ok if the up/down arrows don't do anything if there's just one layer/group. A better option is to check in the poll function if there is at least one node. This way the buttons are grayed out, but don't pop in and out of existance.