Don't confuse the breakpoint construction with the product structure of two Kripke structures or automata. In the breakpoint construction, there is a transition from a state A := {s_{a}, s_{b}, ...} to a state B := {s_{i}, s_{j}, ...} with input x if you can reach each element of B from at least one state of A via input x. So not all states of A need to be able to react to input x! It suffices if there is one state that is able to react to x and in total all states of B need to be reached somehow by any state of A.

So to have a concrete example:

If you start at s_{2} and get the input b you can either go to s_{2} or to s_{3}

=> reachable(s_{2}, b) = {s_{2}, s_{3}}

If you start at s_{3} and get the input b there is no possible transition

=> reachable(s_{3}, b) = {}

From that we get:

reachable({s_{2}, s_{3}}, b) = reachable(s_{2}, b) U reachable(s_{3}, b) = {s_{2}, s_{3}} U {} = {s_{2}, s_{3}}

This procedure is actually the same as with the subset construction, the only difference is the second state set in each q_{i} that is about the final sets (of which I didn't talk about here).

To conclude I do the same for you second example, although it is a bit more complicated:

If you start at s_{0} and get the input !a you can either go to s_{0} or to s_{1}

=> reachable(s_{0}, !a) = {s_{0}, s_{1}}

If you start at s_{1} and get the input !a, the result depends on the value of b, so you either get the following:

=> reachable(s_{1}, !a & !b) = {s_{1}} or

=> reachable(s_{1}, !a & b) = {}

However regardless of those values of b, the union of the reachable states will contain s_{1} in any case due to having s_{1} in reachable(s_{0}, !a)

=> reachable({s_{0}, s_{1}}, !a) = {s_{0}, s_{1}}