I have been beating my head over this for the past week, and after deconstructing steal I have come up with a solution... which I am still testing. Let me describe my very similar scenario:
I have a folder structure:
/myapp
/application
application.js - steal('_includes.less')
_includes.less - @import "variables.less"; @import "mixins.less"; @import "normalize.less"; @import "base.less";
variables.less
mixins.less
normalize.less
base.less
/controller-1
controller-1.js - steal('application/_includes.less', 'controller-1.less')
controller-1.less
Right now, this does not work with the current version of steal, let me try to describe why:
Every LESS file which is Steal'd (stolen?) is compiled on it's own separate instance of the LESS parser. The problem with this is that variables and mixins defined in one file will not be available for another file (out of scope). This defeats the whole purpose of using LESS in my opinion.
The solution is to concatenate every LESS file every time a new LESS file is stolen... and then recompile all LESS files together as one. On top of this, we must prevent LESS from re-loading any @import'ed files every time we recompile. This is accomplished by parsing the LESS files and Steal'ing the imported files instead of letting LESS load the files. Lastly, we must only let the Steal Engine know that there is only ONE css file to be used during the build process. This took me FOREVER to figure out, but you can see the code here:
Use this to replace the file located at "steal/less/less.js". Once this is tested more, I will wrap it up in a more proper pull request.