How difficult would it be to make client.screen an associated list. The index would be the atom in the screen, so that existing code would require no modification. The associated value would be the custom screen_loc for that particular client. If the associated value is null, the atom's screen_loc will be used. (Again, so that existing code will continue to work without modification.) An associated value of "" would remove the atom from view, overriding the atom's normal screen_loc, but leave it in client.screen for accessibility (like adding an atom with no screen_loc value.)
Example: Each client can add particular actions from a global action list to a shortcut bar in their HUD. The action's position on the shortcut bar determines which function key will activate the action, so each player will likely have different actions in different locations.
The mob/character var "shortcut" is a list of text strings used to reference the action in the global action list.
mob/character
var/list/shortcut[12]
Login()
..()
for(var/loop = 1 to 12)
if(shortcut[loop])
var/atom/movable/action/A = GlobalActionList[shortcut[loop]]
if(istype(A)) client.screen[A] = "[loop],NORTH+1"