@Matthew
1) Strings. Calling by method name (i.e. string) has the high road in terms of loose coupling. To gain the local typing, could always wrap in a typed client proxy class (or the tool could build them like service references). Not sure how enums would be used in terms of calling methods. But auto generated typed proxies from meta-data on the uri seems to work fine in other remoting frameworks. And the lower layer stays loose. I suppose a win-win. I am curious if a meta-data public interface method will be added to return method/property names and return types.
2) Reflection. I am not clear where you feel reflection would be required in a method body. Maybe a use case example would help.
3) Message passing. Sync or Async, it is message passing either way. You can layer async on any sync method or visa-versa. AFAICT their Pub/sub is orthogonal to the subject of sync or async method invocation (i.e. message passing).
4) State Machines. I see nothing stopping one from implementing state machine in the actor and methods do actions based on current state. If, on the other hand, IAsyncState consistency is the concern, then that appears to be handled by correct construction of running delegates syncronously on a single thread. I may have missed your intention.