Extending Object.prototype in JavaScript
There are extraneous semicolons (null statements) in your code. Semicolons do not belong after function declarations and for loops.


  I'm extending the Object.prototype which should be fine.


I would argue that it's not fine. While it's unlikely to cause undesired side effects, breaking encapsulation and polluting all objects just for the sake of being able to write foo.removeMatching(bar) instead of removeMatching(foo, bar) seems like bad form.  


if (!Object.prototype.hasOwnProperty.call(this, key)) continue;



Since this is an Object by definition, because you are attaching this to Object.prototype, there is no need to write it like that. This would achieve the same thing (unless you are shadowing hasOwnProperty in which case you have bigger problems):

if (!this.hasOwnProperty(key)) continue;


However there's no need to write this line in the first place. If the object doesn't have a property as its own property, attempting to delete it will do nothing.


  It's all gets enclosed in a closure to prevent namespace pollution.


This also seems unnecessary, why not just write it like this:

Object.defineProperty(Object.prototype, 'removeMatching', {
    value: function (predicate) {
        for (var key in this) {
            if (predicate(key, this[key])) {
                delete this[key];
            }
        }
    },
    writable: false,
    configurable: false,
    enumerable: false
});