We have conditionals overloaded which allow you to compare with other jets, and doubles, which boil down to a comparison with the "value" part of the jet.
So conditionals are not a problem. Loops I would stay away from, since they would destroy the inlining. But if you have an example of a dynamic loop, we would like to hear about it.
You can define define arbitrary functions. You are only limited by the operator overloads defined in jet.h. Let us know if you think something is missing.