Totally agree that it's very reasonable for an execution environment to provide facilities to log the points where execution exits the environment. That's exactly what we have a poor man's version of here. Would be wonderful to have something better.
This initial mechanism used V8's support for "data" pointers on v8::Arguments and v8::AccessorInfo to create closures dynamically, in such a way that a policy-based decision could be made whether or not to log, based on the context. These closures were then cached, using existing mechanisms, so performance wasn't much affected (even so, there was an extra function call on the path for simple DOM operations, such as firstChild, causing observable slowdown in microenchmarks).
In particular, the policy decision happened in V8DOMConfiguration::batchConfigureAttributes, if you look at the code. However, some of those dynamic decision points may go away in the future (e.g., if bindings become more driven by static tables, which is one way of making V8 faster). In case these decision points would have to move earlier (e.g., when an execution context is created, pick one of several pre-populated tables, based on policy), which might also avoid needing dynamically-allocated memory for closures in each process.