The when and unless forms are syntactic sugar for if expressions in one arm. They provide minor convenience, and are useful for distinguishing one-armed conditionals from two-armed if expressions. Some programmers use when and unless to mark conditionals with side effects, avoid one-armed if expressions, and use two-armed if expressions primarily for their values, not their effects.
The case-lambda form allows constructing procedures that distinguish different numbers of arguments. Using case-lambda makes this considerably easier than deconstructing a list containing optional arguments explicitly. Moreover, Scheme implementations might optimize dispatch on the number of arguments when expressed as case-lambda, which is considerably harder for code that explicitly deconstructs argument lists.