If you do FunctionTemplate::New you get a caching template. With caching I mean: every time you instantiate the template in the same native context, you'll get the same function out. This is just how it's supposed to work for Blink. This cache keeps the function strongly since even if objects holding functions may disappear temporarily, the identity of the functions needs to be preserved.
For your case it seems like you could just do Function::New, which internally generates a non-caching template. That way there won't be a strong reference from the cache.
I hope this helps,
Toon