What are my options in terms of dividend distribution?

Dividends can be paid in BTC or XCP.

Depending on issuer and holder preferences, asset can be issued in and dividends paid in XCP or BTC on or the both tokens (BTC and XCP).

Dividend payouts can be automated by using scripts such as Sendmany.

I’d like to pay distribution to asset holders who owned the asset on a given past date.

There’s no feature that would allow you to see the status on a given date, so assuming the asset is not widely traded (i.e. not too many transactions), you could look at the current holders and deduct past buys (and add past sells) by looking at the list of transactions (e.g. for one asset you can see them here: http://blockscan.com/creditdebit?asset=BITCRYSTALS).
For any “sell” actions by addresses that do not hold the token any more, you’d add those addresses to the current list of asset holders. (Notice that the Asset Holders tab (http://blockscan.com/assetInfo/BITCRYSTALS) lets you export a list of all asset holders).

If there’s too much work to be done manually, you could ask someone to write a script to automate that, either using the Counterparty API or a block explorer (coindaddy’s or Blockscan) API or even counterparty-client (CLI).

Edit: a direct query to Sqlite DB could be used to get the status at particular block height: