Each project within the Juicebox protocol is represented as an ERC-721 NFT.
Whoever is the owner of a project's NFT has access to admin functionality for that project within the protocol, which ultimately gives it control over the project's funds.
Projects can be created either within the context of Juicebox with a call to JBController.launchProjectFor(...) which also configures its ruleset properties and sets it up to receive payments, or by itself with a call to JBProjects.createFor(...). The launchProjectFor(...) transaction calls createFor(...) as part of its routine.
Look through the JBProjects contract for a complete list of relevant read functions, write functions, and emitted events.