Тут есть несколько подходов, все зависит от потребностей. Я не буду описывать простые решения, типа тупо require из общей папки, или дописать автолоадер, и т.п.
Главное - в папке vendor мы ничего руками не меняем и ничего там не создаем - ей управляет композер и лездь туда не надо.
Первый варик - для общего кода создаем git-репозиторий (неважно где, хот у себя на компе, хоть на том же github/bitbucket) и тупо подключаем репозиторий. Но это нищебродский вариант.
Второй (если код не приватный) - делаем как все - создаем репозиторий на гитхабе и регим пакет в пакагисте - самый стандартный путь. Отсюда все вытикающие плюсы, например, менеджмент версйи.
Третий - то же самое, но для приватного кода: настраиваем свой композер-сервер (например satis) - получаем тоже самое что composer + github, только приватный вариант.
Следует отметить, что когда вы будете делить на пакеты, то ваш код будет разрабатываться в отрыве от проектов где он используется. То есть не так что вы в своей библиотеке что-то написали, обновили страницу основного проекта - и все применилось - нет. Вы должны будете закомитить, затегировать, запушить, в основном проекте обновить зависимости, и т.д. Поэтому советую писать общий код в абсолютном отрыве от того где он будет юзаться (как фреймворк - его разработчики ж не знают где он будет юзаться). Чтоб проверять изменения советую (если еще не в юзаете) освоить автоматическое тестирование. Нужно будет гораздо лучше продумывать интерфейс вашей либы. Но в целом - это все позитивное движение. Так что вперед и удачи )