I have a Connected App. I would like for other companies to be able to add my Connected App to their Salesforce accounts, so they can take advantage of the service that I provide. What are the steps necessary for making a Connected App available for other companies?
Short answer: you don't necessarily need to do anything to make your connected app available, but you might want to package it, for a couple of reasons.
In the default case, if a user at some Salesforce customer uses your app, either on a mobile device, or by visiting a website, it will work for them. They don't need the client id, client secret or anything. It will just work.
When a user first accesses a connected app from their org, the app is added to the list at Setup | Manage Apps | Connected Apps OAuth Usage. From here, the admin can block access to the app, if desired.
If the app has been packaged (see below for more), it is also added to the list of apps they can manage at Setup | Manage Apps | Connected Apps. Now the admin can manage usage of the app in their org, and configure access for their users, for example, allowing access only to users with a given permission set.
That's the default case, but there is a wrinkle. On request, Salesforce support can enable 'API Client Whitelisting'. This reverses the org's default behavior - connected apps will now require explicit admin approval before they can be accessed.
When you add your connected app to a managed package, you get an 'install URL'. When an admin 'installs' your app via this URL, they really just add it to the list at Setup | Manage Apps | Connected Apps. In this way, they can explicitly authorize some set of users to access the app.
The other benefits of packaging your app are that you can take advantage of all the other features of managed packages, such as listing on the AppExchange, push upgrades, post-install Apex scripts, license management, and enhanced subscriber support.