But people _do_ switch from regex to literal mode and back. That's why M-r
is a convenient isearch binding for doing exactly that, and on prevision
occasions when this topic has come up for discussion, others have indicated
that they use this M-r binding.
I can't imagine the usefulness of switching from regex to literal mode
when the search string contains a complex regexp.
But it you want to share string and regexp histories, it's easy to implement
by another layer of indirection like for query-replace history variables:
(defcustom query-replace-from-history-variable 'query-replace-history
(defcustom query-replace-to-history-variable 'query-replace-history
Sure. It's possible to make this behavior customizable.
But then perhaps search-ring-yank-pointer and regexp-search-ring-yank-pointer
need similar indirection, or code could be smart enough to detect such
indirection and compute the right pointer depending on where such variables
point to.