Если вызвать boundFoo(), то по итогу будет использован obj1, что в данном случае некорректно. Думал в методе проверять анонимная функция передается или нет, и в случае если нет, то в прототип записывать исходный код функции, а если да - то вызывать из прототипа ф-ю foo, но думаю это не очень хороший способ.
что-то типа такого. Здесь нужно сохранять контекст в переменные для дальнейшего переопределения, в способе с наслоением через "return function return function" не получается заменять контекст в нижних слоях, потому что он жестко прописан в вызове func.call().