Hmmmm ... your and my definition of value objects are very much at odds. I'm both a model and contract first type of person, but when working in the model, I don't want to be thinking about the contract too much. Some value objects are more valuable than others, I'll acknowledge that. Yet, I have to come across the first person that is proficient in crafting them without practice. Hence, why in general, I tend to tilt towards creating "more" value objects than strictly necessary. It opens the door to dry-ing up guarding/constraining logic all over the place, makes you think of what a good representation is using the primitives at your disposal (or other value objects once we venture into composition), makes you think of what the "value" is, opens the door to renewed insight as you play with them and move logic around, trying to embed domain language in their collaborating behavior, stimulate closure of operations, etc ... That said, some examples are trivial and we could debate whether or not a primitive wouldn't have done the same job. Personally, I tend to stay clear from the primitives of my programming language as much as possible when working on a model. Yet most people I get to work with tend to obsess over their primitives, so I'm used to being met with resistance on this particular subject.
On the contract side, I tend to put on another hat, looking for a serialization format that embraces versioning (avro, protobuf, etc), opting for micro-formats, standards and prior art if available, which may be very different representations from the value object's internals. The mapping between both the model constructs and contract constructs is a seam I like control over. Pushing it even further, I guess it's no longer seen as beneficial to write your own serialization, given the proliferation of reflection based serialization libraries/fxs, but oddly enough I've done that on multiple occasions while still delivering on time. Not that I'm trying to promote such practices.
What often gets ignored in this type of debate is that some models naturally tend to favor data orientation while others clearly benefit from behavior orientation. Some models have complexity on the inside, others have complexity on the interaction side. Knowing which one you're dealing with might make the choice of what to invest in easier.
Disclaimer: This is my personal opinion, I'm not trying to convince anyone of how to go about these things.