I like to point to this article from Sylvain, which is really well written.
It explains a lot of things and is really interesting for Cassandra users pre-CQL3.
Actually, old dynamic columns were defined this way :
CREATE TABLE test (
PRIMARY KEY (key, column1)
) WITH COMPACT STORAGE;
This is still doable with CQL3, column1 would be your column name, value, the value of your column. As the primary key is composed by key + column1, you can add as much columns as you want.
An other way to do it is to dynamically add columns (Alter table ..., afaik, this is lock free and does not slow performance too much).