Because you’re overwriting parameters that other CDbCriteria methods have set. In the example from the first post, this:
$criteria->addInCondition('language',$languages);
will have set a parameter behind the scenes. If you replace $criteria->params instead of adding to it, the query that’s generated will have a placeholder with no matching parameter.