I've struggled with this question too.
More than anything else, I feel that a library shape should be consistent and applicable to all designs that use that part. So, the worst possible thing you can do is create a part which shows only the specific usage of each pin in the first design that part was used on. Do this and you end up recreating the part's symbol each and every time you use it in a new design.
With PICs I tend to include every possible feature on each pin, which does result in a complex but re-usable symbol.
Then I started using ARM processors, and it all got a bit much. A hundred or more pins with half a dozen features per pin? No thanks. I name the pins PA0, PA1 and so on, and just accept that the symbol doesn't show all the detail.
I am, however, a strong believer in comments on a schematic. There's no reason at all why you shouldn't create a symbol which is generic, but then add a text label to each pin to show its usage if you need to.
In many cases, it may be obvious or unimportant. If, say, you have an SPI EEPROM connected to some CPU pins, they might be configured as GPIO or they might be a dedicated hardware SPI interface. From the schematic point of view, it really doesn't matter.
Perhaps, though, you have a digital input which is actually used to gate a timer, or to cause an event which triggers an AD conversion. Then it might make sense to label that this is how the pin is configured, because it's providing useful additional information about how the design works.
Bottom line: describe everything that's non-obvious. But not everything that's obvious.