The easiest solution I can think of is to use kill-buffer-query-functions hook to prevent *Pymacs* to be killed. Like this:
(defun my-pymacs-saver ()
(if (equal (buffer-name) "*Pymacs*")
(yes-or-no-p "Really kill *Pymacs* buffer? ")
t))
(add-hook 'kill-buffer-query-functions 'my-pymacs-saver)
It will ask you if you really want to kill *Pymacs* buffer or not. You can even make it impossible to kill from keybinds by this:
(defun my-pymacs-saver ()
(if (equal (buffer-name) "*Pymacs*")
(progn
(message "NEVER kill *Pymacs*!")
nil)
t))
I use pymacs-terminate-services to forcefully reload all modules. I have a function similar to pymacs-reload-rope in http://www.emacswiki.org/emacs/AntonNazarov.
Probably you can add pymacs-terminate-services to kill-buffer-hook (locally in *Pymacs* buffer) for more graceful termination. But I am not sure. For the rest of your question, I guess it’s better to ask/request in the Pymacs issue tracker.