An object exposed to directives that need to track changes on it
return function filtersReturn() {
    return {
        current: currentFilters,
        applied: appliedFilters,
        apply: apply,
        clear: clear
    };
};



This piece of code looks odd to me,  could you simply return the object itself, like this:

var returnFilters = {
    current: currentFilters,
    applied: appliedFilters,
    apply: apply,
    clear: clear
;}  
return returnFilters;


I just don't see the point of returning a function that doesn't do "function" stuff,  it really returns a function that returns an object, so why not just return the object to begin with?

One more thing, I didn't like the name of the function, so when I changed it to an object I changed the naming as well.  The name returnFilters sounds better than filtersReturn  I mean when I say "filters return"  I am thinking "filters return ... what?"  but these are the return filters so I want the name to express that for me so when I read the code later I don't get confused as to what this filter is doing.