You may not be able to create API keys programmatically, but you can create service accounts. Service accounts can do all the things on API keys can, and are much more secure than API keys. And you can create them via API calls!
Here's the API reference for creating service accounts, and for creating service account keys (which have a public/private keypair).
Here's the API reference for creating projects.
You should be able to do whatever you were trying to accomplish with these tools. But for most simple use-cases using the UI is recommended.