Не знаю как опенбокс, а флаксбокс перечитывает конфиг меню на лету. Т.е. только поменял и сохранил его, как уже в меню видны изменения. Посему как враиант - бекапишь основной конфиг, кладя его рядом под другим названием. Когда нужно сгенерить конфиг скриптом, генеришь его в тот, который уже есть, изменяя его так, как тебе нужно, меню, соответственно, изменяется. Потом, когда надобность в этом отпадает, заменяешь конфиг на бекапный. Профит.
Я уже как-то задавал здесь подобный вопрос (про rc.xml), но решения предложено не было. include по стандартам не сработал, но можешь попробовать — вдруг я криво делал %)
В скрипте в stdout послается, то, что нужно отобразить в меню, например:
print '<openbox_pipe_menu>' #тег начала сгенерированного мею
print "<separator label='TEST' />" # то, что вы прописали бы в menu.xml
print '</openbox_pipe_menu>' #тег конца
Получаем разделитель с надписью «TEST». Все проще простого оказалось :)