Observable storage - revised
I am just going to comment on a few things because I don't think I have a great high level understanding of your code is meant to do (not that is bad for any reason).  

In general I would avoid adding scope to variables if it is not needed, for example instead of declaring _data that is available to the whole F class and reference it with a special id I would just put a new data object on each instance.  Keep in mind limiting the scope of variables would apply for _featherInstances and _eagleInstances as well but there could be some business reason for it that I don't understand.

     var F = function(data) {
                this._id = _featherInstances.length;
                _featherInstances[this._id] = this;
                this._data = data;
            }

        F.prototype.has = function(key) {
            return this._data.hasOwnProperty(key);
        }
   ...


Another note to make is has might not work as you expected it.  For example:

new F({key: undefined}).has('key') would return true