You already figured it out: when you write an Android app, you can do operations which requires permissions. The complete list is the link you have given : http://developer.android.com/reference/android/Manifest.permission.html. Most of the permissions listed are very explicit for developpers, but for the user, some can sound mysterious.
To take your example, the READ_PHONE_STATE permission is mostly used to have access to the phone ID. It allows developpers to know how many users (phones) they have. But this permissions also let us know if you are receiving a call or not to react in consequence (if it is a music application: reduce the volume), and things like that.
But, for 2 different Android apps, you can see the same permissions with 2 different uses of it. For large permission as WRITE_EXTERNAL_STORAGE (to write on SD card), one can just write its settings files, the other can put a malware script on it... The only way to know exactly what an app does with the permissions, is to see the code. But, in most case, if it is a non-open-source app, you can't...
I hope I answer your question. If not, I will try to give details with your more precise question.