Ну, это зависит от объекта. Но объекты копируются , когда вы передаете их push_back. Вы можете проверить это, добавив некоторый отладочный код в конструктор копирования. Таким образом, если Object хорошо себя ведет и хранит отдельные копии отдельно, то foo1 может изменить вектор, который он получает, как ему угодно.
Более эффективный способ сделать это - заставить foo1 принять итераторы начала и конца:
void foo1(std::vector<Object>::const_iterator start,
std::vector<Object>::const_iterator end);
...
foo1(objectVec.begin(), objectVec.end() - 5);
Если вы не используете const_cast, то система типов гарантирует, что foo1 не изменит никаких элементов, поскольку они являются const_iterators.