Is it possible to have two versions of my extension published on the Chrome webstore (one public and the other unlisted)? If so, will they have different extension ids?
They will be separate extensions, so there will be separate IDs. However, this is perfectly normal practice.
AMO, unlike CWS, offers "beta" versions as a separate update stream. But CWS has no such concept.
I already have a public extension published on the Chrome webstore. I would like to make modifications that only beta testers have access to.
You'll need a separate extension. Of course, beta-testers will be inconvenienced by the fact that data is not shared between the two; but that's to be expected of a beta-test. Providing a data export/import mechanism would be helpful though.
When I am ready to release the extension publicly, do I only need to mark the extension from unlisted to public in the developer dashboard? Will the original version be removed from the webstore or is there a way to install previous versions?
Ideally, you want to replace the old "stable" version with the new one. That would make the old version unavailable, but provide a smooth transition for your existing users.
If you want to keep the "legacy" version separately available, you can of course just publish publicly the "new" version. But you have the concern about migrating your user base (and its data) with it.
Consider this answer I wrote previously on inter-extension migration.