Well, I wrote my own theme so I could have a consistent experience between GUI and terminal. It meant customizing my terminal colours so they were non-awful (the minimal 16 are super-garish, I have mine tuned for less harsh contrast but also more colour differentiation considering I'm red/green colourblind).
I then used the same customized terminal colours in my GUI theme.
It works like this:
(if (display-graphic-p)
(setq color-yellow "#f57900"
color-bright-yellow "#fce94f"
color-red "#ff6464"
color-bright-red "#ef2929"
color-bright-green "#73d216"
color-green "#4e9a06"
color-blue "#729fcf"
color-bright-blue "#204a87"
color-white "#babdb6"
color-bright-white "#eeeeec"
color-magenta "#ad7fa8"
color-bright-magenta "#1d324b"
color-black "#1a2022"
color-bright-black "#2e3436"
color-bright-cyan "#555753"
color-cyan "#888a85")
(setq color-black "black"
color-white "white"
color-red "red"
color-green "green"
color-blue "blue"
color-yellow "yellow"
color-cyan "cyan"
color-magenta "magenta"
color-bright-black "brightblack"
color-bright-white "brightwhite"
color-bright-red "brightred"
color-bright-green "brightgreen"
color-bright-blue "brightblue"
color-bright-yellow "brightyellow"
color-bright-cyan "brightcyan"
color-bright-magenta "brightmagenta"))
Then, later on, I use these colours for setting the faces for the cursor, region, keywords, comments, tweaking various different major modes, etc.
With a true-colour capable terminal there's no technical reason to need to take these steps, but this approach works for me in rxvt-unicode and mintty, the two terminals I use on Linux and Windows respectively, and aren't mucked up by any level of tmux or screen nesting.