Как использовать и для чего предназначен main-bower-files?
Он ничего не подключает. Задача этой штуки, собрать пути до всех библиотечек.
Приведу пример. Возьмем jQuery. Для того что бы использовать jQuery в своем проекте вам надо сделать следующее.bower install --save jquery
bower будет искать пакет с названием jQuery, скачает его и на этом его миссия будет завершена, а у вас в директории bower_components (или как вы ее назвали в bowerrc), будет папка jquery с несколькими файликами. В случае jQuery вам нужен только один файл, он является главным.
В bower.json пакета jquery указывается главный файл (тот, который собственно и должен использоваться в проекте){
  "name": "jquery",
  "version": "2.1.2-pre",
  "main": "dist/jquery.js",
вот это вот поле main и содержит имя нужного нам файла. К слову файлов можно указывать сколько угодно и какого угодно типа.
Задача этой тулзы - пробежаться по всем зависимостям которые использует ваш проект, собрать пути до каждого файлика указанного в поле main конкретного пакета, и отдать вам массив этих путей.
Далее вы можете: сконкатенировать js-ки в один файл, закинуть их в другую тулзу которая постарается найти эту библиотеку в cdn и сделает локальный фэлбэк... вариантов масса. Суть в том что вам не нужно вручную прописывать пути до нужных файлов, это не интересно, скучно, и после обновления пакетов внезапно может поломаться сборка.
А как быть с библиотеками, которые не заполнили у себя поле "main" (пример: библиотека async) 
И что делать, если у разных библиотек главный файл называется одинаково? (пример: select2 и angular-ui-select-2, второй зависит от первого, но называются одинаково select2.js)