Okay so first of all just because you are using an isolate scope doesn't mean you can't access something in the parent scope. An isolate scope is designed to limit what you get by default but you can specify whatever you want from the parent scope. The correct way to do that would be to set up a two way binding in your directive using the "parentScopeVariable: '='". Forgive the horrible formatting I'm on mobile and I want to go to bed :-).

So yes, like you said you can use the "attrs" parameter too, sure. There are even tricky $eval ways of setting things on the parent scope that are only passed in as attrs. You can't have more than one directive with an isolate scope on a given element/component anyway, so you really do need to be careful about when you use isolate scope. It definitely lends itself to clean design though because you have to be deliberate about what you use in your directive. Point being, relying on attrs is fine and necessary sometimes, in my mind. Admittedly, it does feel a little hackish or whatever (thinking code smell), but I don't think there's a strong case for that.

Lastly I have spent a ton of time on the Angular API doc site and there's a ton of good stuff on there. There's a pretty good directive reference on the $compile service page. Again, mobile, sorry. If I was on a full computer I'd do nice code blocks and link the the directive ref, sorry :-). A quick google and you'll find it.

So you definitely can use an isolate scope and there are ways to pass function call backs to a directive, pass directive function references out of a directive, back to a controller, two way data-binding, etc. Isolate scope is great for all that but it doesn't sound like you'ee trying to do anything too complex.