I know this has been a while but 4.24 still has this issue so just in case anyone sees this, I have found a solution in blueprint.
The long and short of it is your mouse cursor visibility Gets tracked in 2 locations.
-Custom Game Instance
-Custom Mouse Cursor Widget
Step 1- Create a game instance and give it a Boolean Variable to track Visibility of the mouse cursor. For me I just wanted to hide if i was using gamepad so thats what I called it.
Step 2- Create whatever script you need to Show/Hide, mouse cursor. For me this is a player controller, and i use another function to detect gamepad input. the game pad input is not necessary but I will include it.
Step 3- whenever you call a function to show, or hide the mouse cursor, forward the result to the game instance. the reason we use a came instance is that it can be called from anywhere.
Step 4- Create a custom mouse cursor widget. all you need is an image.
Step 5- bind its visibility to the game instance Boolean variable you made.
Step 6- now set your new cursor in the project settings as your default cursor
You should be good to go. Now the visibility of the mouse cursor is changed depending on a global variable that can be called from anywhere, and still maintains the functionality of the show/hide mouse cursor nodes. if you have any questions feel free to ask but it might take me a minute to get back to you.