Без ключевого слова ref (out), параметр всегда передаётся по значению (by value).
В языке есть ссылочные типы и значимые типы (reference type и value types) -
вот тут объясняется, в чём разница.
XElement - ссылочный тип. Вы передаёте адрес объекта (в памяти), иными словами - указатель на объект, иными словами - ссылку. Разумеется, при манипуляции с этой областью памяти, изменяется и сам объект.
Отвечая на ваш вопрос, вынесенный в заголовок: для ссылочных типов - нет, не обязательно, для значимых типов - обязательно.