You can only shape traffic when packets are outbound and leaving an interface. But this isn't really an issue, as long as you recall that any router has at least two network interfaces. Here's an ASCII "graphic":

{Internet} --- $external --- [router] --- $internal --- {local net}

Let us assume that there is a packet which has just arrived at our router from another computer on the local network, at the $internal NIC. The router can queue the packet, outbound, when it places it on a queue for transmission to a destination on the Internet, via the $external NIC.

The opposite direction is the same case. An inbound packet from the Internet can only be queued once it is placed on an outbound queue for transmission to a local computer on the $internal NIC.

Yes, I know, we can only shape traffic when packets are outbound and leaving, that is general rule, for each and every router device (not only BSD).

But how to apply this on pf? So, for IP packet from LAN to Internet, we set:
pass in on $int_if proto...... to..... set queue gueueLANtoINTERNET
this packet from LAN to Internet will be queued on $ext_if, whe it leaves device?

Also, yes, you can set a queue name on an inbound traffic rule; the queue name will apply to the state, if state is established, and therefore to any outbound traffic for that state. It just won't have any affect on the inbound traffic, since that cannot be queued.

There is an example showing pass in rules in the pf.conf(5) man page where the set queue option is defined.