Yeah, I feel your pain. I've been complaining about this for years now, also having moved from Cocos2D to SpriteKit. This thread is from two years ago and in it I complain about being annoyed for already a year: https://forums.developer.apple.com/message/214626. So it's been at least three years already 😀.
As I report in the thread linked above, this behavior changed with iOS 8, then with iOS 9, then again with iOS 10. At least now I don't have to worry about inconsistency (because I don't support iOS 9 anymore, really), but the problem still persists. There is no sense why nodes would block touches by default, and there's even less sense in not having a way to opt out of it.
I have encountered this problem in a number of things, usually having to do with nodes that I hide periodically. For example, I have a custom blocker class, which acts as a touch blocker when activated. Since I can do nothing to have it NOT block touches, I either move it out of screen or make it (0, 0) in size when it's not supposed to be active. Resizing to zero of course becomes a problem when you have content in the node, so in those cases the only option is to move the node away from the frame, which makes me feel like I'm developing software in 1995.
The biggest problem I have is with creating objects that swipe between selections (think of a button that has a SKCropNode and scrolling content inside). All of the scrolling content that is hidden beyond the cropping is blocking touches. Now, you can always code interactions to not react outside of the masked area, but the area outside the mask is still gonna swallow touches. In an app with multiple scrolling windows at the same time (think for example a hacking simulator game), you would have to very smartly switch zPositions based on where you touch. And if you wanted multitouch, sorry, it's impossible (at least with object-oriented structures).
I really don't know what to do at this point. Should we band together and send a signed letter or something 😀?