Thank you all for your answers. There are some great ideas between them. I decided that instead of accepting one of them, I decided to collect all ideas from the posts above, summarize them in one answer, and accept this answer as reference for future readers.
Reasons why players hoard:
- They develop a habit to solve certain situations using certain tools. When they have a tool which can only be used once, they will never develop a habit for using it. As a result they forget that they actually have this tool.
- They don't know what the item is actually doing, so they aren't aware when they are in a situation where it could be useful.
- They don't want to do a mistake and prevent further progress by using an item too early.
How to prevent it as a game designer:
- Give the player a hint when in a situation where a certain one-shot item would be useful
- Make it possible to re-obtain the items after use.
- Give the player so many one-shot items, that each individual one doesn't seem that valuable and irreplaceable.
- Add severe consequences to dying (more than having to reload the last savegame), so that the player will use one-shot items when desperate.
- Don't make them single-use. Add a long cooldown to items instead or allow them to be recharged with another resource, so that the player can use them multiple times.
- Make it impossible to hoard them. When the player is aware that they will lose the item anyway, they will use it sooner. This could be done by adding a time-limit, removing them after completing the level or severely limiting the number of items which can be carried at a time.
- Punish the player for hoarding too many one-shot items, so that they will be motivated to get rid of them soon.