A joystick may be better than a joypad because it allows small throttle changes. I forget whether GCS allows you to use the mouse to move the on-screen joystick, but that sounds a bit difficult to hover with.
I wonder if there is a way to "trim" the throttle joypad so that it is less than half throttle. Adjust the trim for hover. This will drift to less power and a descending hover as the battery discharges during flight.
You could experiment with the settings to find which one causes the error, but you don't need GPSAssist added to any GPS flight mode (such as HomeLeash). That may be the problem. I suggest VelocityRoam GPS flight mode as it is the mode that allows normal steering. HomeLeash back stick is always toward home and left stick is always left circle around home (if I recall).
Once you are flying, any altitude stabilized flight mode / thrust mode has center stick to mean "keep this altitude", BUT and a very big BUT, you must manually hover with a reasonable hover throttle setting for several seconds before this, so it can learn what position hover throttle is. If you trim the throttle down for manual control, you will have to trim it back up to 50% to use altitude stabilized modes. When flying, a short blip up or down will be at a controlled speed (you set the speed in the settings) not full power if you are using AltitudeVario (thrust mode) or any GPS flight mode (flight mode).
It might be possible to hold the drone down with a string, apply center throttle for a few seconds, then switch to an altitude stabilized mode and release the drone. It may jump up a ways but I am guessing that it will eventually learn and reduce to hover. Of course this may not work, so it is up to you if you want to try it. At least be flying a self leveling mode (or VelocityRoam GPS mode) with a way to cut the motors off (zero throttle cuts motors off by default). To get it down if it gets too high, you can stop the motors to let it fall, and restart the motors before it hits the ground. There needs to be a setting to skip this learning period and just use say 30%.
What version of LibrePilot are you using? 16.09? I think that the task of removing this learning period is simple, so I might be able to make you a custom firmware that uses AltitudeHoldSettings->ThrustLimits->Neutral for this. So you would take off in Manual thrust (climbs quickly) and quickly switch to some altitude stabilized mode and it would stop climbing and go into hover.
One more point. You probably want to configure it so that low throttle on the joypad is not zero. That way when you blip down it doesn't fall and tumble, but comes down level at a controlled rate (for altitude stabilized modes you set this rate in configuration, using a value in meters per second and it never climbs or descends faster than that, with normal stick, the speed is proportional to stick).