I've personally used the X.Y.Z model of semantic versioning until now. For a long time, this has fit the use and the overall user base's needs.
What I've realized from switching from trying to use different models of organising version information is that it will be heavily dependent on what you need. Using semantic versioning provided basic stability, but it still had problems, like not having enough information for myself and not being easy enough for most non-technical people to understand.
I've tried messing around with different schemes, and it seems that using dates & version-specific names provides an easy-to-understand structure for most users, whilst using an X.Y.Z.Patch.Build scheme (Patch here means stability, like Beta or Alpha) provides relatively good amounts of information to suit my preferences. With this in mind, having a mix between the two would probably be best in my case. But as we know it, things aren't so simple and this still requires me to have to tweak the result until I get something that you can keep using throughout your development, that won't still need changing in the future.