Yes, I basically know how Smalltalk works. If you can load a regular unmanaged DLL and call some of exported function, it would be enough to load use a .NET assembly, but this is not easy at all. I don't want to discuss a way of implementation of COM component, I'm taking about the ability to export some .NET methods as unmanaged.
Many developers would even say this is absolutely impossible, but this is not true: there is a solution based on CLR standard, but not on pure C#.
The trick is to build a C# project, disassemble it into IL code, modify it to make some methods exported as unmanaged and compile back. Also, there is an automated way to do it: mark those method with some attribute and implement everything else in a special MSBuild task. This way, you can integrate such customized build into your pure-C# project.
If still interested, please first read my answers about this solution:
loading C# DLL in MFC[
^],
How can I use a dll created in Visual Basic 2008 in Visual Basic 6.0[
^],
Call Managed DLL written in C# from Unmanged Code VC++[
^],
API's in .Net: Managed or UnManaged Code[
^].
You will find further references to CodeProject articles with source code and detailed explanation.
—SA