The changes it makes vs. regular javascript are pretty well described here.
From that reference:
Caja takes JavaScript (technically, ECMAScript 5 strict mode code),
HTML, and CSS input and rewrites it into a safe subset of HTML and
CSS, plus a single JavaScript function with no free variables. That
means the only way such a function can modify an object is if it is
given a reference to the object by the host page. Instead of giving
direct references to DOM objects, the host page typically gives
references to wrappers that sanitize HTML, proxy URLs, and prevent
redirecting the page; this allows Caja to prevent certain phishing
attacks, prevent cross-site scripting attacks, and prevent downloading
malware. Also, since all rewritten programs run in the same frame, the
host page can allow one program to export an object reference to
another program; then inter-frame communication is simply method
invocation.
And, Google's site on Caja.