Коммутатор пересылает пакеты не из одного порта во все остальные, а из одного порта в тот, за которым по MAC-таблице виден mac-адрес назначения
Этим он отличается от хаба, который действительно полученное из одного порта пересылает, натурально, во все остальные.
VLAN - это вполне себе L2. Коммутатор умеет разделять порты по VLAN, тегировать пакеты, передавая через один порт трафик нескольких VLAN, разбирать теги, пришедшие от иных коммутаторов. Может уметь QoS, IGMP, кучу друих трех-четырехбуквенных аббревиатур и всё это будет L2. Главная черта - пересылает кадры ethernet как есть, не меняя содержимого (разве что для случаев фрагментации)
До тех пор, пока коммутатор не начнет уметь маршрутизировать трафик. То есть, принимать трафик на одном L3 интерфейсе (имеющем, например, IP-адрес и указанный как гейтвей для клиента), и отправлять через другой L3 интерфейс в другую ip-подсеть. Даже, внимание, сверяясь со списками доступа - IP ACL.
В общем, L3 коммутатор умеет смотреть уже не только на заголовки ethernet-кадра, но и в заголовки IP-пакета и умеет Ethernet-кадры менять (при отправке пакета в другую подсеть dst и src mac-адреса, естественно, переписываются), а заголовки IP пакета оставляет неизменными.
Чего обычно L3-коммутатор не умеет, так это NAT, это уже к маршрутизаторам. То есть, когда устройство не просто перекладывает трафик по подсетям, но уже меняет заголовки IP-пакетов или занимается их инкапсуляцией - это уже маршрутизатор.