Value sets can be attached to parameters of a concurrent program or to a DFF segments where as Lookups are attached only to the fields of a Form/Page
Lookups can be maintained by end users where as Value Sets are almost never maintained by end users, with the exception of GL Flexfield codes. Value sets are usually maintained by System Administrators.
Lookups can have translated values in different languages but not the values in the Value Sets
Value sets can contain values that are a result of an SQL Statement. Hence it is possible to make Value Set list of values dynamic.
On the contrary, Lookup Codes are Static list of values which can only be entered through Lookups Form.
We have several different types of value sets but not lookups.