The documents don't contain a full technical comparison of chan_sip and PJSIP, but a few details show up across the guides worth pulling together.
What the documents say
PJSIP is described as the modern Asterisk SIP stack used in recent VICIdial builds, which implies chan_sip is the older stack it's replacing.
Both show up as valid choices when configuring a phone or a carrier trunk. On a phone record, SIP and PJSIP are the common choices for VoIP desk phones, softphones, and web phones. On a carrier trunk, the Protocol field is SIP, PJSIP, or IAX, matching your provider.
Configuration-wise, the two stacks live in separate files and are managed separately. For NAT fixes, chan_sip settings go in sip.conf under [general] with externip and localnet, while for PJSIP, the equivalent lives in the transport section of pjsip.conf. Reloading also differs: you'd run module reload chan_sip.so (or module reload res_pjsip.so for PJSIP).
Checking registration status uses different CLI commands too. For chan_sip you run sip show peers, but if you use the newer protocol, the equivalent command is pjsip show endpoints, which prints the same kind of online or offline state for PJSIP devices, and pjsip show contacts is handy for spotting exactly which address a phone registered from.
What's not covered here
The documents don't go into the deeper architectural differences (why PJSIP was built, its threading model, multi-transport support, etc.) or give a recommendation on which to pick for a new install. If you need that level of detail, reach out through /contact.