How to pass the matrix attributes to views without too much ceremony Consider the following example:

master.twig

{% for module in entry.main_contents %}
  {% include '_modules/' ~ module.type with module only %}
{% endfor %}


my_awesome_module.twig

&lt;h1&gt;{{ title }}&lt;/h1
{{ content | raw }}


In my case obviously I get the twig error Argument 1 passed to Twig_Template::display() must be of the type array
because I cannot pass objects to the include function. In your examples you use the following solution:

master.twig

{% for module in entry.main_contents %}
  {% include '_modules/' ~ module.type with {'data': module} only %}
{% endfor %}


my_awesome_module.twig

&lt;h1&gt;{{ data.title }}&lt;/h1
{{ data.content | raw }}


Isn't there a way to pass directly the matrix attributes without encapsulating them in an other array?

p.s.

I hooked in also a twig helper method that returns $model-&gt;getContent()-&gt;getAttributes() but it seems that the array returned looses all its nested properties ( like the assets list...)
The short answer is no. 

The longer answer is you will probably get used to it. Craft twig templates in general look like {{entry.title}} (or {{data.title}}) rather than just {{title}}. I find it easier to read, though you may not.