This technique for functional programming, and testing functional programming
or is this overkill that is easily solved another way?


_fetchUser and _fetchUsers appear to be the same function; save for the id parameter.

If interpret the question correctly, _fetchUser can be substituted for _fetchUsers (which can be removed entirely) by utilizing default parameters instead of .bind().

For example

async function _makeApiCall (uri) {
  try {
    const response = await Promise.resolve(uri);
    return response;
  } catch (err) {
    throw new Error(err.message);
  }
}

async function _fetchUsers({makeApiCall = _makeApiCall, _URI_USERS = 'abc', id = ''} = {}) {
  return await makeApiCall(_URI_USERS + id);
}

export default _fetchUsers;




&lt;script type="module"&gt;
  import _fetchUsers from './script.js'; 
  (async() =&gt; {
    console.log(await _fetchUsers() // 'abc'
               , await _fetchUsers({id:'def'}) // 'abcdef'
               );
  })();
&lt;/script&gt;


plnkr