Excelente post, Pedro! 👏
Esse é um daqueles conceitos que a gente usa todo dia mas pouca gente para pra pensar no "como" e "porquê" funciona.
Lembro quando comecei com Node.js e ficava me perguntando como que magicamente o npm run conseguia encontrar os comandos sem eu precisar digitar aquele caminhão de caminho relativo.
E pior, já peguei projeto antigo onde o pessoal instalava as ferramentas de CLI globalmente (npm install -g) e dava aquela dor de cabeça quando a versão global era diferente da do projeto... O .bin resolve justamente isso, mantendo o binário específico da versão que você instalou no projeto.
Seu exemplo com ESLint foi perfeito! É exatamente isso que acontece com o jest, webpack, typescript e tantas outras ferramentas.