This is why, for instance, there's no native Date format in JSON. Dates in JavaScript require running a constructor -- new Date() -- so they aren't in JSON.
It looks very interesting to me from the point of view of dealing with certain data types better (at all, in fact), and handling circular references.
I think it's one of those "easy on the surface, but surprisingly complex" problems.
When you start allowing arbitrary code execution, it's a lot of work to prevent certain "functions" (i mean that in the non-programming way).
Trying to detect the unsafe parts so they could be turned off after that point would be impossible as you suspect (the task would be constrained by the halting problem, https://en.wikipedia.org/wiki/Halting_problem).
And by ring, I of course mean HMAC.