Как обычно, для простоты, рассмотрим живой пример. В проекте понадобилось использовать гитхаб-проект mapbender. Все ничего, но его авторы не позаботились о поддержке composer. Придется делать самим. Composer позволяет прямо в composer.json вашего проекта описать внешние пакеты за их авторов.

В данном случае выглядит это так:

"repositories"[
{
 "type""package",
 "package"{
    "name""mapbender/mapbender",
    "version""3.0.5.3",
    "dist"{
        "url""https://github.com/mapbender/mapbender/archive/release/3.0.5.zip",
        "type""zip"
    },
    "source"{
        "url""https://github.com/mapbender/mapbender.git",
        "type""git",
        "reference""release/3.0.5"
    },
    "autoload"{
        "classmap"["src/Mapbender/"]
    }
  }
}],

Теперь composer знает что где взять и как развернуть, если в проекте подключить пакет "mapbender/mapbender" версии 3.0.5.3

"require"{
  "mapbender/mapbender": "3.0.5.3"
}   

Ну и не стоит наверное говорить что после добавления пакета автолоадинг отлично находит все его классы и все выглядит очень цивилизованно и чистенько.

Полная информация про разные варианты пользовательских репозиториев - в отличном мане composer, где также расписано как добавить поддержку версионности по бранчам/тегам.