There are some good reasons always to do Contract-First when it comes to wsdl.
The simple answer as to why people don't, is because it's less effort to simply have Visual Studio, or Apache CXF, or what ever implementation of Web Services you're using generating one for you.
It's easy up front, but down the road it can get messy.
Portability
One of them is you rely on the wsdl being generated being something that can be consumed by many different sources. Typically the wsdl's generated by either Visual Studio or Apache CXF will generate issues.
Sun's implementation of SOAP tends to generate wsdl's that contain "parameter" as the part name of messages, even though that causes an error when Visual Studio tries to consume a service as a web reference. Visual Studio's implementation also has known quirks that have to be hand tuned by those consuming their services in some situations.
In fact both Java and C# offer ways to override the auto-generated wsdl with a hand tuned one.
Stability
Contract-Last means your code generates the contract. This also means that it gets harder to avoid changing the API by mistake. If, on the other hand, you generate the WSDL yourself (it isn't hard) and you write the XSD (that isn't hard either - and in my opinion is easier to get right than JAXB classes in Java), then you enforce the contract. It is explicit when the contract changes.
Versioning
Since in Contract-First it is explicit when you change the contract, you can then version it in the namespace, and that means it becomes very clear when different versions are sent. Legacy clients can thereby be prevented from attempted to consume new messages which can be useful if you've made breaking updates.
This can save many man hours.