If anyone stumbles on this looking for a solution I was able to work it out in hal using wcomp and some and, or, not components. Basically I used the wcomp to check the startup position from the last_position.txt file, then using a bit of funny logic I made it so after the joints hits the home switch in the positive direction, the wcomp keeps the home switch closed for the remainder of the positive direction travel, then in the negative direction I used the min wcomp output to disable the home switch input for the remainder of the negative travel. So the home switch only properly works in a narrow joint position range. With this setup the normal homing routine does exactly what I need. When the joint is in the positive direction it backs off until it's in the proper range and in the negative direction it ignores the physical switch until it's in the proper range. There's some silly logic with some and/or/not comps which I'm sure could be made more elegant, but it does work.