My question is why do we need training/learning data to group
customers with similar online behaviors. I can simply do it based on
per-defined criteria like income-range/age/location/preference etc
This part of your question is unclear. By definition unsupervised learning doesn't use training data.
If you have known criteria that allow you to classify your data into useful categories, then you should use that, and not bother with machine learning. You use unsupervised machine learning when you have complex data and you aren't sure how, or even if the data falls into categories. For example, if you have a bunch of marketing data about customers, it may be that looking at the age or postal code is all you need to break them into useful categories. On the other hand, it may be that you actually need some complicated weighting of age, postal code, and the type of cell phone they own. The main point being that you simply don't have pre-existing knowledge of how to group your customers. Unsupervised learning can point you at the combinations of characteristics that break your customers into distinctive categories.
Similarly, semi supervised learning makes use of unlabeled data
(typically a large amount) for training, besides a small amount of
labeled. Not sure how how unlabeled data helps in labeling the given
Suppose that we have a bunch of marketing data, and what we really want is to break our customers into two categories: cheapskates and big spenders. A fully unsupervised method might break our customers into two categories (or three, or four, or five, ...), but the categories don't necessarily correspond to cheapskates and big spenders. If we throw in some labeled data for our customers, identifying them as cheapskates or big spenders, the labeled data can be used to tweak our clustering algorithm, driving it to classify our customers (even the unlabeled ones) into the two desired classes.
Note that labeled data has two distinct uses in machine learning: training and validation. As I wrote, unsupervised machine learning doesn't use training data. However, you almost always want to validate that your algorithm is doing something useful. So, whether you are using unsupervised, semi-supervised, or supervised learning, it's useful to hold out a set of labeled data, and run it through your final system, to verify that it's working as desired.