I know that when vim beeps at me it is generally telling me I did something wrong. Sometimes it displays a helpful error message and sometimes it does not. Is there a way to make it always show a message giving a reason for a beep, or is there a way to ask it for one?
It is not completely true that vim uses the beeps (or bells, as it calls them) only in errors. There are many events that can trigger the bells, only some of them are errors.
You can custom the bell to ring only in errors (or whenever you want), by setting the value of 'belloff'.
All the error messages should be shown when they are happening, other things that make vim beeps are probably not errors.
You can read more about customing the beeps and when they happens here:
help belloff help errorbells help visualbell