Можно и не упрощая :), динамически создавайте новый pad у tee, и добавляйте ветку из созданных элементов.
Перед редактированием как основная последовательность, так и подключаемая должны быть в состоянии паузы.
Примерный код добавления бранча:
GstElement *pipeline, *branch;
// Положим, что все элементы созданы и связи между ними настроены
// (pipeline не связан и не содержит в себе branch)
gst_element_set_state (pipeline, GST_STATE_PAUSED);
gst_element_set_state (branch, GST_STATE_PAUSED);
// Запросим pad из основной последовательности, и приёмник из branch
tee_queue1_pad = gst_element_get_request_pad (tee, "src%d");
queue1_queue_pad = gst_element_get_pad (branch, "videosink");
// Настроим связи
gst_bin_add(GST_BIN(pipeline), muxbranch);
gst_pad_link(tee_queue1_pad, queue1_queue_pad);
// Вернём к проигрыванию
gst_element_set_state (branch, GST_STATE_PLAYING);
gst_element_set_state (pipeline, GST_STATE_PLAYING);