There are a lot of other advantages to using attr that I think you're overlooking:
attr gets deeply nested objects - useful for computes
attr resolves computes
attr gives you flexibility on what you're actually cross-binding to in computes and views. For example, you could use myList.attr('length') to listen to changes only on the length, and then access the list directly to without binding to changes on individual items.
There's really no way to integrate getter/setters across the board while still being able to cross-bind leanly.