How can I return specific matrix rows based on criteria?
As far as I know, the only criteria to filter Matrix blocks is the type property or to pick a block by it's position with first, last or the new nth filter.

Yes, it would totally make sense to have more options to grab select Matrix blocks and I am rather confident that this is s.th. that is already on "The List".

Update:

Craft 2.3 change things! Besides using the type property or to pick a block by it's position with first, last or the nth filter it is now possible to query for Matrix blocks using all sorts of custom field parameters.

{% set entry = craft.entries.slug('myMatrixEntry').first() %}

{# Query Matrix blocks using custom field parameters #}
{% set blocks = entry.myMatrixField.type('text').myLightswitchField('1').myDateField('&gt; 2014-12-02') %}

{% for block in blocks %}
...
{% endfor %}