Unfortunately, there are some limitations using SSE in the QlikView load script.The behavior you are describing is working as intended. If SSE is used in a load statement, the function will be interpreted as a scalar function, unless it's an aggregation, and will only send one row of data at a time expecting one row of data back per call. We don't know when or if the functionality will be supported in QlikView.
If you are not limited to use QlikView I would recommend you to use Sense Feb 2018 when it's released. There we introduced a new load syntax `LOAD ... EXTENSION ...` for Table load using SSE (you can return multiple columns in a table) and all data is sent to the SSE plugin in a single call, just as you described. The github repository (GitHub - qlik-oss/server-side-extension: A Qlik server-side extension protocol for extending the Qlik built-in expressio… ) is updated with examples and documentation of table load and the new functionality of sending TableDescriptions from the plugin describing the metadata of the returned table. (See the changelog for SSE v1.1.0 here: server-side-extension/CHANGELOG.md at master · qlik-oss/server-side-extension · GitHub)