You won't be able to get the embedded schema directly with the Razor Mediator, but since its just a wrapper of the TOM.NET API, you can create your own function that returns the schema's title.

The following example allows you to pass it a ComponentModel instance and a name of the field that you want to get the embedded schema's title for:

    @using Tridion.ContentManager.ContentManagement.Fields

    @functions {
        public string GetEmbeddedSchemaTitle(Models.ComponentModel component, string fieldName) {
            ItemFields fields = new ItemFields(component.TridionObject.Content, component.Schema);
            EmbeddedSchemaField embeddedField = fields[fieldName] as EmbeddedSchemaField;
            if (embeddedField != null) {
                return ((EmbeddedSchemaFieldDefinition)embeddedField.Definition)
                    .EmbeddedSchema.Title;
            }
            return null;
        }
     }

Then, for you first example, you could do the following (assuming your field "link" is a multi-valued component link field, and the field name using an embedded schema for each of these components is "MyEmbeddedField"):

    @foreach (dynamic comp in Component.Fields.link) {
        <div>Title For "MyEmbeddedField": @GetEmbeddedSchemaTitle(comp, "MyEmbeddedField")</div>
    }

**Update w/ New Assumption**

Looking at the error message you provided, the above use example's assumptions are probably incorrect.  It looks like your "link" field is a multi-valued embedded schema field, in which case a use example for that would be:

    GetEmbeddedSchemaTitle(Component, "link")

Notice that you are not passing your "comp" variable in, but the actual "Component" variable for the assumption that Component contains an embedded schema field named "link".