How to cross-reference labels defined in external typst projects?

Yes.

No, if extern.typ is outside of the root directory (typst c --root), then this is not possible.

IIUC, LaTeX can access arbitrary file when reading or writing to a file system. This is a potential hazard for user privacy, as any piece of code in LaTeX (any package) can read potentially sensitive data and include it in the result document without the end user noticing this. Later, by accessing the document (which might be publically published by the user), a bad guy (maybe the author of the package) can read that sensitive data and use it for their advantage.

This is something that Typst can’t risk happening, which is why it doesn’t allow random access to anything, only to download packages marked as #import "@preview/package:0.0.1". You can’t write anything to the file system and read outside of the root directory. There is no access to the network or time (except datetime.today()), same goes to the Wasm plugins.

If files are in the root directory, then you can do:

$ x = y $ <eq:1>
#show math.equation.where(block: true): set math.equation(numbering: "1.")
#include "extern.typ"
@eq:1

Or:

#let section = [
  $ x = y $ <eq:1>
]
#show math.equation.where(block: true): set math.equation(numbering: "1.")
#import "extern.typ": section
#section
@eq:1

I guess you can also include an external file, but it has to be a package in the designated package directory. But that doesn’t make much sense, as the content in the package isn’t very flexible (it’s hard-coded).

As a last resort approach, you can use symbolic/hard links (if they are supported by the file system).