The motivation for getting introspection into the language as a first-class entity is backed by a lot of previous and well known pain-points in three main areas:

Serialization -- being able to save the state of an object as a sequence of bytes and reconstituting a new instance of the same type at some later time. This is important for all sorts of applications, one of the most compelling is distributed computing. Generative Programming -- being able to generate and compute with types to reduce repetitive code. Automating repetitive patterns like setter/getter functions and adding value semantics to types via generated proxy types at compile time are very powerful techniques. JIT and Embedded Runtimes -- allowing generation of types in embedded runtimes to be inspected and used appropriately by the hosting application. Dynamic languages have this capability because precisely of this feature (think about how "eval" and similar functions work).