If you like the way tzkt displays the storage of contracts, you should probably use their API instead of trying to get the information from a node.
If you want to redo the same work, the human-readable names used for the fields very probably come from the field annotations in the type of the storage. To get this type you can do curl -s http://localhost:8732/...
No, if you pay for storage and then later remove the value, you are not refunded the storage fee.
This has been discussed in the developer slack, and I believe has been recorded as a feature request somewhere