Algorithm for difference of two semi-decidable languages
You are confusing languages with algorithms.

An algorithms is not "computable" or "non-computable". It can halt or not halt, but the latter doesn't mean that the language it defines is non-computable.

In this case, if conditions 1 and 2 are fully-computable (assuming by that you mean decidable, or recursive), then you can write algorithm 3 as follows:

Given x, check both condition 1 and condition 2. Print the input iff condition 1 holds and 2 doesn't.

The fact that algorithms 1 and 2 are "silly" in that they get stuck for no "good reason" doesn't affect the decidability of their languages.