Boiler.js Deep Object Comparison Code/Performance Optimizations?
After going through the code and the library itself, here are some thoughts:


Functions are still objects. You can even attach properties to it. You might want to look into this unless you only want to compare the function, excluding the things attached to it.

function foo(){};
foo.bar = 'baz';
console.log(foo.bar); //baz

Early on, you can weed out values that are equal or actually the same to avoid going through everything. Equal strings, numbers, booleans and even objects in general (Since they are compared by identity) return true.

obj1 === obj2


If this returns false, it could be that the values are non-equal primitives, or non-identical objects. You can return false for the primitives. For objects in general, only then will you do the "structure equality check".
Comparisons return a boolean value. So if you return a boolean after a comparison without doing anything else after, you can shorten the statement.

/*from*/ if(a !== b) return false;
/* to */ return a === b;

While for(var o in obj1) is perfectly valid JS, it's something you'd look out for. You actually did this twice in the code. If you pass your code through a linter, you'd get a o already defined error. Do this instead

var o;

for(o in obj1){...}
...
for(o in obj2){...}


Or better, just use another variable name instead of o on the second loop.
You seem to already have a lot of abstractions in your library, which is good. However, your code seems to use a mix of abstracted and vanilla code. I suggest using your abstracted code so that in case the approach for a certain operation is wrong, you only need to modify the abstracted version. 

jQuery actually does this. It keeps a "Core API" which is used by the other parts of the source. If you look at their source, each and extend are used quite a lot.
null and undefined are already falsy values. Assuming you already weeded out other values for obj1, you could already simplify.

if(typeof obj1 === "undefined") return false;
if(obj1 === null || obj1 === undefined) return false;

//to

if(!obj1) return false;
//or
if(_.isFalsy(obj1)) return false;