Unless you use the mostly experimental support for full RBG-colors in some terminals, you're limited to the indexed 256 color palette provided by the terminal. You're right that terminals may slightly deviate in the exact colors used, and that will be noticeable. If you completely reassign colors (turn red into blue etc.), there's nothing that corrects this in Vim, as Vim will ignorantly request "color at index #42".
If the differences are only in the basic 16 colors and the rest of the palette is correct and you use a colorscheme with both GUI and cterm definitions, you can work around this via plugins like CSApprox, which take the GUI color definitions and convert them to a closely matching 256-color cterm
color palette for high-color terminals.
Another approach is taken by csexact, which modifies the (supported) terminal's palette to exactly match Vim's GUI colors. If your terminal is supported, that may be worth a try.