There is no hierarchy in the IOTA network. i.e. there is no authority relationship between nodes (except for the coo in this early stage).
Dynamic connections between nodes means that connections between nodes may change over time without disturbing the network. It can be done in the IOTA network (either manually by editing a configuration file, either automatically with Nelson).
Pairing restrictions is just practical solution to the fact that a server with reasonable computing power and bandwidth can't handle a huge amount of neighbors (any mesh-network have the same limitation).
Unavailable APIs is irrelevant regarding network topology (API restrictions are just in place to prevent attacks)
Regarding all this points, we can say that IOTA network is more a mesh network than a tree (or star) network.
Just a few more precisions after your comments :
Unavailable APIs is not irrelevant because it limits the ability of a node to self manage its relationships to the network. If a node closes itself to being peered, or only allows certain peering behaviors, then that takes away from dynamic connections between nodes.
IMO, "Dynamic connections" don't means that you must be able to establish a peer to peer connection with any node at any time. It means that connections between nodes may be evolve over time and that won't hurt the network significantly.
Also, you say there is no hierarchy in the IOTA network. However, there are only a few public nodes listed and many overlay services, such as Bolero, use a strict set of nodes for bootstrapping. That implies that there is a hierarchy.
Important word in your comment is "bootstraping". Indeed, there is kind of central server to support bootstraping process (when you use an automatic peer discovery infrastructure like Nelson). But this is just for automatic bootstrapping, those servers aren't required to run the network. BTW, Bitcoin also use similar technique to bootstrap a node (i.e. there is a list of IP hardcoded in bitcoin-core client: those hardcoded servers plays the same role has Nelson/Bolero).
there are only a few public nodes listed
Yes, but I don't think it have an important impact on the nature (mesh vs tree vs star) of the network. Today, those non-public nodes are probably connected to less light-nodes than the public ones. But, IMO with mass-adoption (or adoption by big device manufacturers), it will be the opposite in future (i.e. non-public nodes will be connected to far more light-nodes than public ones).
full nodes are configured to reject any requests from neighbors that weren't mutually tethered with them. That is a notable departure from other mesh networks - such as Bitcoin or Bittorrent, etc
[I'm not an expert in Bitorrent/Bitcoin protocol] AFAIK, any node (in any mesh network) always have the ability to reject a connection from another node. In Iota, the default is to only accept known neighbors while in other mesh networks the default can be to accept connections from unknown peers. Again, I don't think that this difference in the implementation impact the nature of the network.
It is clear that peer switching in IOTA isn't as smooth as it is in a Bitorrent/Bitcoin networks, but this fact don't transform the mesh network in a star/tree network.