GUI offers you layout features (anchoring, etc), graphical features (9-slice, stenciling, etc), automatic scaling, and very easy collision detection with nodes. It’s designed for UI. Yes, you can certainly use game objects instead, but you should really think about whether it’s better to rewrite all the built-in GUI features, or to learn how to use them.
For your mouse cursor issues, I suggest you deal with mouse input in your GUI first, since it will be on top and you get the cursor’s GUI position directly from on_input(). If the GUI will use the mouse input (if the cursor is over a button), then it should consume the input so it doesn’t get passed down to the world.
If the GUI does not consume the input, then a script in the game world can use it. First you will need to convert the mouse pos to world space based on your camera (unless your camera will never ever move, zoom, or rotate), and then you can start checking for collisions with your game world objects.
There will probably be some edge cases to this. For example, if you are dragging a world-space object, then you probably don’t want the GUI to use the mouse at all.