If you feed the API the uselang parameter (for a module other than watch or parse), the API reports invalid parameter. However, MW (before the API comes to play) uses that to set global state of $wgLang (or the fake global state of all those Context variables).
The warning should be less "Unrecognized parameter: 'uselang'" and more like "uselang parameter not explicitly allowed for this module, but may nonetheless have side effects. It is recommended one does not use that parameter".
I still feel we should have some sort of warning, because users should not be using it unless its specifically listed as allowed.
See also gerrit change 34595 for some discussion