Why does Kotlin need "const" keyword?

If there are cases when you don’t want it, then it should be opt-out. Why then it is a keyword, and not an annotation, like @JvmField and such?

Also, I don’t understand the point about reflection and interop. As far as I can see, if you declare a const val in a file or an object, the corresponding generated JVM object will have a static final field. Could you expand on that a bit more?